我最近开始学习ruby,我知道你可以使用这两种语法的代码块.但我刚发现一个我不明白的案例:
#my_hash is a hash in which the keys are strings and the values arrays, but dont think about the specifics fo the code
#if I run my code like this, it works perfectly
my_hash.each do |art|
puts mystring.gsub(art[0]).each {
art[1][rand(art[1].length) -1]
}
end
#but if I use this, it prints "Enumerator"
my_hash.each do |art|
puts mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end
end
Run Code Online (Sandbox Code Playgroud)
是因为你不能窝对端对吗?我使用的是1.9
puts mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end
Run Code Online (Sandbox Code Playgroud)
在这里你puts没有parens 调用,do ... end指的是puts方法,它对块和打印没有任何作用mystring.gsub(art[0]).each(使用是a Enumerator).
在{ ... }被称为与最近的方法.变得丑陋,但你可以用do ... end:
puts(mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end)
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,将结果放在变量中并打印变量:
var = mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end
puts var
Run Code Online (Sandbox Code Playgroud)
无论如何,each不要改变对象,它只是迭代并返回对象本身.您可能想要该map方法,进行测试.
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |