采用参数或块的方法

Method taking an argument or a block

是否可以编写一种根据输入类型采取不同行为的方法?我正在尝试写一个像这样的

hello("derick")
#=> "hello derick!"

hello do
  "derick"
end
#=>"<hello>'derick'<hello/>"

是的,在 Ruby 中是可能的。使用 block_given? 你可以检查一个块是否通过并执行块 else return 任何其他结果。

def hello(s=nil)
  if block_given?
    "<hello>'#{yield}'</hello>"
  else
    "hello #{s}"
  end
end

puts hello("derick!")

puts (hello do
  "derick"
end)

HTH