Я хотел бы создать метод, который принимает аргумент блока, но по умолчанию для блока используется метод, который всегда возвращает true.
def my_method(&print_if = Proc.new { true })
internal_value = [1, 2, 3]
puts "printing" if print_if.call(internal_value)
end
my_method { |array| array[1] == 2 }
"printing"
=> nil
my_method { |array| array[1] == 3 }
=> nil
my_method
"printing"
=> nil
Похоже, что мой лучший вариант - проверить наличиеблок в методе.Это работает, это просто более грубый
def my_method(&print_if)
internal_value = [1, 2, 3]
puts "printing" if !block_given? || print_if.call(internal_value)
end
my_method { |array| array[1] == 2 }
"printing"
=> nil
my_method { |array| array[1] == 3 }
=> nil
my_method
"printing"
=> nil
Любой способ по умолчанию блок-аргумент в Ruby?Пожалуйста, не отвечайте на вопросы, основанные на внешних библиотеках (даже на Rails), просто попытайтесь выяснить, возможно ли это с чистым Ruby.