gpt4 book ai didi

ruby - 传递给每个的代码块使用括号但不使用 'do' -'end' (ruby)

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:12 25 4
gpt4 key购买 nike

我最近开始学习 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

是因为不能嵌套do-end对吗?我正在使用 1.9

最佳答案

puts mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end

这里你调用了没有括号的 putsdo ... end 指的是 puts 方法,它对 block 没有任何作用,并且打印 mystring.gsub(art[0]).each(带有一个 Enumerator)。

{ ... } 用最近的方法调用。变得丑陋,但你可以用 do ... end 来做到这一点:

puts(mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end)

或者,更好的是,将结果放入一个变量并打印该变量:

var = mystring.gsub(art[0]).each do
art[1][rand(art[1].length) -1]
end
puts var

无论如何,each 不会更改对象,它只是迭代并返回对象本身。您可能需要 map 方法,对其进行测试。

关于ruby - 传递给每个的代码块使用括号但不使用 'do' -'end' (ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com