为什么我的 ruby 方法调用不起作用?(产量)



当我在控制台上运行文件时,我不明白为什么会收到这个错误消息:no block given (yield) (LocalJumpError)

这是我的代码:

def block_splitter(array)
array.partition { |item| yield(item) }
end
beatles = ["John", "Paul", "Ringo", "George"]
puts block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end

谢谢你的帮助!

这是一个空白问题。你的问题在这一行:

puts block_splitter(beatles) do |beatle|
# ...
end

上面的代码是这样解释的:

puts(block_splitter(beatles)) do |beatle|
# ...
end

也就是说,ruby解释器认为块被传递给puts方法,而不是block_splitter方法。

通过分配一个变量并打印结果,您将看到这正如预期的那样工作:

result = block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end
puts result

或者,您可以将其定义为一个1行,ruby解释器可以像您预期的那样处理它:

puts block_splitter(beatles) { |beatle| beatle.start_with?("P") }

或者,你可以把它包在额外的括号里:

puts(block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end)

因此存在缺少括号的问题。Ruby解释器允许不使用这些,但当您使用嵌套方法调用时,使用它们更好(有时也是必要的(。修复它你可以做一些类似的事情

puts(block_splitter(beatles) do |beatle| 
beatle.start_with?("P")
end)

或者更好的

puts(block_splitter(beatles) {|beatle| beatle.start_with?("P")})

最新更新