小编Ste*_*fan的帖子

UTF-8 Ruby中的无效字节序列

我有这样的字符串"abce\xC3".sub("a","A"),当我执行该行时,我得到以下错误.

ArgumentError: invalid byte sequence in UTF-8
    from (irb):20:in `sub'
    from (irb):20
    from /home/vijay/.rvm/rubies/ruby-2.0.0-p598/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题.

ruby character-encoding ruby-2.0

3
推荐指数
2
解决办法
3293
查看次数

散列默认值是具有相同默认值的散列

像这样设置哈希的默认值:

hash = Hash.new { |hsh, key| hsh[key] = {} }
Run Code Online (Sandbox Code Playgroud)

将为未知密钥创建(并分配)新哈希,但将返回nil创建哈希的未知密钥:

hash[:unkown_key] #=> {}
hash[:unkown_key][:nested_unknown] #=> nil
Run Code Online (Sandbox Code Playgroud)

我可以让它适用于第二级,如下所示:

hash = Hash.new do |hsh, key|
  hsh[key] = Hash.new { |nest_hsh, nest_key| nest_hsh[nest_key] = {} }
end
Run Code Online (Sandbox Code Playgroud)

但是,它在第​​三级不起作用:

hash[:unkown_key][:nested_unknown] #=> {}
hash[:unkown_key][:nested_unknown][:third_level] #=> nil
Run Code Online (Sandbox Code Playgroud)

如何让它在任意级别工作?

hash[:unkown_key][:nested_unknown][:third_level][...][:nth_level] #=> {}
Run Code Online (Sandbox Code Playgroud)

ruby hash default-value

3
推荐指数
1
解决办法
85
查看次数

Ruby:将常量转换为字符串

我想将常量转换FOO::BAR为 string "BAR"

这与constantize所做的相反并且非常相似demodulize,除了我期望一个字符串而不是实际的 Module 引用。

我想我可以让我自己的助手来做到这一点,但我无法获得FOO::BAR.

理想情况下,我想避免使用任何 3rd 方宝石。

例子:

class FOO
  BAR = {}
end

# this works
FOO            #=> FOO
FOO.name       #=> "FOO"    

# this doesn't
FOO::BAR       #=> {} 
FOO::BAR.name  #=> NoMethodError: undefined method `name' for {}:Hash
Run Code Online (Sandbox Code Playgroud)

ruby

3
推荐指数
1
解决办法
1639
查看次数

如果变量为nil,则赋值字符串,否则附加

我正在尝试缩短此代码:

if a.nil?
  a = "foo"
else
  a << "foo"
end
Run Code Online (Sandbox Code Playgroud)

a是一个nil或一个字符串.

我已经尝试了a ||= "foo",a += "foo"但如果a是这些则不起作用nil.

ruby ruby-on-rails

3
推荐指数
2
解决办法
1403
查看次数

How to pass build flags like `--with-ruby-include` to gem install?

(I know that my Ruby installation is a bit messed up, but:) I'm trying to install a native gem and it gives me an error

ytg@yui:~> sudo /usr/bin/ruby.ruby2.3 /usr/bin/gem install ruby-debug-ide
Building native extensions.  This could take a while...
ERROR:  Error installing ruby-debug-ide:
    ERROR: Failed to build gem native extension.

    current directory: /usr/lib64/ruby/gems/2.3.0/gems/ruby-debug-ide-0.6.0/ext
/usr/bin/ruby.ruby2.3 mkrf_conf.rb
Installing base gem
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...
ERROR: Failed to build gem native …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems

3
推荐指数
1
解决办法
2691
查看次数

Ruby sum stdin整数

我有:

$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]
Run Code Online (Sandbox Code Playgroud)

假设你有一个整数序列,1..nruby新手会像这样对序列求和:

$ ruby -e 's=0
     for i in 1..500000
        s+=i
     end
     puts s'
125000250000
Run Code Online (Sandbox Code Playgroud)

现在假设我有相同的序列来自stdin:

$ seq 1 500000 | ruby -lne 'BEGIN{s=0}
                            s+=$_.to_i
                            END{puts s} '   
125000250000
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

现在将终端值从500,000增加到5,000,000:

$ ruby -e 's=0
         for i in 1..5000000
            s+=i
         end
         puts s'
12500002500000   <=== CORRECT

$ seq 1 5000000 | ruby -lne 'BEGIN{s=0}
                             s+=$_.to_i
                             END{puts s} '
500009500025     <=== WRONG!
Run Code Online (Sandbox Code Playgroud)

它产生不同的总和.

awk并且perl两者都以相同的顺序产生正确的结果:

$ …
Run Code Online (Sandbox Code Playgroud)

ruby stdin

3
推荐指数
1
解决办法
144
查看次数

不是 ruby​​ 队列线程安全为什么队列不同步?

我试图创建许多线程并在数据结构中返回结果,我读到它Queue是线程安全的,但是当我运行代码时,它不会产生预期的结果。

require 'thread'

class ThreadsTest
  queue = Queue.new
  threads = []
  for i in 1..10
    threads << Thread.new do 
      queue << i
    end
  end

  threads.each { |t| t.join }

  for i in 1..10
    puts queue.pop()
  end
end
Run Code Online (Sandbox Code Playgroud)

代码打印:(总是有点不同)

4
4
4
4
10
10
10
10
10
10
Run Code Online (Sandbox Code Playgroud)

我期待数字 1 到 10。

synchronize手动尝试过但无济于事:

  mutex = Mutex.new
  for i in 1..10
    threads << Thread.new do 
      mutex.synchronize do
        queue << i
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

ruby multithreading thread-safety

3
推荐指数
1
解决办法
715
查看次数

如何添加存储为字符串的小时和分钟

我正在尝试添加存储在数据库中的小时和分钟,如下所示:

+----+---------+-------+
| id | user_id | time  |
+----+---------+-------+
|  1 |       4 | 03:15 |
|  2 |       4 | 02:22 |
+----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

time领域是一个string.如何添加字符串表示的小时和分钟05:37

我试过这个

current_user.table.pluck(:time).sum(&:to_f)
Run Code Online (Sandbox Code Playgroud)

但输出只是5.

ruby ruby-on-rails

3
推荐指数
2
解决办法
392
查看次数

Ruby,类和继承

我需要帮助理解继承.

class MyArray < Array
end

a = MyArray[1, 2, 3] #=> [1, 2, 3]
b = MyArray[4, 5]    #=> [4, 5]
c = a + b            #=> [1, 2, 3, 4, 5]

a.class #=> MyArray
b.class #=> MyArray
c.class #=> Array
Run Code Online (Sandbox Code Playgroud)

我不明白为什么添加的结果不是MyArray类的实例.

ruby inheritance

3
推荐指数
1
解决办法
96
查看次数

对数组使用.sum时没有方法错误

我找到了其他方法,但是根据ruby文档,这应该可行吗?

p [1,2,3,4].sum
#=> 10
Run Code Online (Sandbox Code Playgroud)

相反,我得到了..

undefined method `sum' for [1, 2, 3, 4]:Array (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

ruby sum nomethoderror

3
推荐指数
1
解决办法
58
查看次数