que objetos metodos manejo lista funciones for clases bucle asignacion ruby arguments default-value ruby-1.9

objetos - ¿Es posible definir un bloque con argumentos predeterminados en Ruby?



ruby for bucle (2)

Esta pregunta trata sobre los argumentos opcionales pasados ​​a un bloque Ruby. Me pregunto si también es posible definir argumentos con valores predeterminados y cuál sería la sintaxis de eso.

A primera vista, parece que la respuesta es "no":

def call_it &block block.call end call_it do |x = "foo"| p "Called the block with value #{x}" end

... resultados en:

my_test.rb:5: syntax error, unexpected ''='', expecting ''|'' call_it do |x = "foo"| ^ my_test.rb:6: syntax error, unexpected tSTRING_BEG, expecting kDO or ''{'' or ''('' p "Called the block with value #{x}" ^ my_test.rb:7: syntax error, unexpected kEND, expecting $end end ^


Argumentos de bloque por defecto del pobre:

def call_it &block block.call end call_it do |*args| x = args[0] || "foo" p "Called the block with value #{x}" end


ruby 1.9 permite esto:

{|a,b=1| ... }