为什么我的 ruby 方法调用不起作用? (屈服)
Why doesn't my ruby method call work? (yield)
当我在控制台上 运行 我的文件时,我不明白为什么会收到此错误消息: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
感谢您的帮助!
所以是少括号的问题。 Ruby 解释器允许不使用它们,但是当您使用嵌套方法调用时,最好(有时是必要的)使用它们。修复它你可以这样做
puts(block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end)
甚至更好
puts(block_splitter(beatles) {|beatle| beatle.start_with?("P")})
这是一个空白问题。您的问题出在这一行:
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-liner,ruby 解释器将按您预期的方式处理它:
puts block_splitter(beatles) { |beatle| beatle.start_with?("P") }
或者,您可以将其括在额外的括号中:
puts(block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end)
当我在控制台上 运行 我的文件时,我不明白为什么会收到此错误消息: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
感谢您的帮助!
所以是少括号的问题。 Ruby 解释器允许不使用它们,但是当您使用嵌套方法调用时,最好(有时是必要的)使用它们。修复它你可以这样做
puts(block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end)
甚至更好
puts(block_splitter(beatles) {|beatle| beatle.start_with?("P")})
这是一个空白问题。您的问题出在这一行:
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-liner,ruby 解释器将按您预期的方式处理它:
puts block_splitter(beatles) { |beatle| beatle.start_with?("P") }
或者,您可以将其括在额外的括号中:
puts(block_splitter(beatles) do |beatle|
beatle.start_with?("P")
end)