¿Cuál es la sintaxis (=>) se utiliza en asignar objeto de error en la variable de "rescate" método?

StackOverflow https://stackoverflow.com//questions/9686991

Pregunta

El rescue lo que podría asigna una variable para hacer referencia al objeto de error tiene esta sintaxis: (=>)

rescue => e

Si rescue es la una de la general de la llamada al método, ¿cuál es el significado de =>.¿Puedo utilizar la misma sintaxis que en otra llamada de método?

my_method arg1, arg2 => my_obj
¿Fue útil?

Solución

Mientras raise es, de hecho, un método de, rescue no es.Es una palabra clave, y se definen en analizar.y:10467.Como tal, la sintaxis que tiene es especial para rescue (desde => e no es cualquier tipo de método argumento), y no es válido para los métodos de sí mismos (al menos no con el mismo significado).Cómo/dónde la rescue => e la sintaxis misma se define en el analizador no estoy del todo seguro.

Otros consejos

Como algunos entrenador de fútbol/rey-filósofo podría decir, es lo que es.Aquí está la de Ruby analizar.y.De particular interés es esta parte:

opt_rescue      : keyword_rescue exc_list exc_var then
                  compstmt
                  opt_rescue
                    ...
                | none
                ;

exc_list        : arg_value
                    ...
                | mrhs
                    ...
                | none
                ;

exc_var         : tASSOC lhs
                    ...
                | none
                ;

Explicación
exc_list básicamente permite la nada, un tipo de excepción, o un (splatted) serie de excepciones como la de rescue ZeroDivisionError, LoadError

exc_var puede no ser nada o => some_variable

opt_rescue por lo tanto se puede rescue por sí mismo o más que uno o ambos de los de arriba.

Es sólo aparecen aquí como una sintaxis especial para la asignación de excepciones.El único otro uso para => es para clave-valor de la asociación de.

Tenga en cuenta también que arg_value y mrhs están en el lado izquierdo y lhs es en el lado derecho, que es lo que puedo decir que el único lugar donde esto ocurre.Alguien me corrija si estoy equivocado aquí, pero no hay ninguna otra "hacia atrás" en la asignación de analizar.y.

No, la sintaxis en el rescate sólo se utiliza allí.Si utiliza el hash rocket '=>' en una llamada a una función como esta, será interpretado como un hash, y si arg2 no se definió como una variable previamente, será un error.

def foo(a,b)
  puts b.inspect
end

foo "bar", :baz => 5   #=> {:baz=>5}

foo "bar", baz => 5    #=> NameError: undefined local variable or method `baz'

baz = "flux"

foo "bar", baz => 5   #=> {"flux"=>5}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top