Мне удобно следующее:
def some_def(foo, &block)
puts "block utilized below"
block.call(foo)
end
def some_other_def(bar)
puts "using yield below"
yield bar
puts "and back into the method"
end
Итак, я научился хранить блоки (и процы) отдельно от ключевого слова yield
.
Однако я столкнулся сследующий код:
# ./open_file.rb
class File
def self.open(name, mode, &block)
file = new(name, mode)
return file unless block_given?
yield(file)
ensure
file.close
end
end
Кажется, что параметр &block
не имеет значения, когда я реализую, запустите этот код в irb:
irb -r ./file.open.rb
и сделайте что-то вроде:
File.open('foo.txt','r') {|f| puts f}
Является ли &block
необязательным для block_given?
in:
return file unless block_given?