Каковы различия в поведении двух следующих реализаций в Ruby метода thrice
?
module WithYield
def self.thrice
3.times { yield } # yield to the implicit block argument
end
end
module WithProcCall
def self.thrice(&block) # & converts implicit block to an explicit, named Proc
3.times { block.call } # invoke Proc#call
end
end
WithYield::thrice { puts "Hello world" }
WithProcCall::thrice { puts "Hello world" }
Под "поведенческими различиями" я включаю обработку ошибок, производительность, поддержку инструмента и т.д.