是否可以声明一个带有 block 作为默认值的方法?

use*_*869 5 ruby lambda block

我想编写一个方法,它接受一个块,如果没有给出块,则应该使用默认块。所以我想要这样的东西:

def say_hello(name, &block = ->(name) { puts "Hi, #{name}" })
  # do something
end 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时,我收到语法错误。

我知道我可以使用block_given?. 但我对第一种方法感兴趣。我错过了什么还是这是不可能的?

saw*_*awa 5

一些答案建议使用block_given?,但由于不可能存在块nilfalse给出块时,您可以简单地使用||=

def say_hello(name, &block)
  block ||= ->(name){puts "Hi, #{name}"}
  # do something
end
Run Code Online (Sandbox Code Playgroud)