/ / Метод, що приймає аргумент або блок - ruby, методи, блок

Метод взяття аргументу чи блоку - рубін, методи, блок

Чи можна написати метод, який діє по-різному залежно від типу вводу? Я намагаюся написати такий, що діє так

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

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

Відповіді:

1 для відповіді № 1

Так, це можливо в Ruby. Використовуючи block_given? Ви можете перевірити, чи передано блок, і виконати блок, інакше повернути будь-який інший результат.

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

puts hello("derick!")

puts (hello do
"derick"
end)

HTH