我有这样的字符串"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)
有人可以帮我解决这个问题.
像这样设置哈希的默认值:
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) 我想将常量转换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) 我正在尝试缩短此代码:
if a.nil?
a = "foo"
else
a << "foo"
end
Run Code Online (Sandbox Code Playgroud)
a是一个nil或一个字符串.
我已经尝试了a ||= "foo",a += "foo"但如果a是这些则不起作用nil.
(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 -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) 我试图创建许多线程并在数据结构中返回结果,我读到它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)
我错过了什么?
我正在尝试添加存储在数据库中的小时和分钟,如下所示:
+----+---------+-------+
| 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.
我需要帮助理解继承.
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文档,这应该可行吗?
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)