uso reglas punto pone paréntesis parentesis las fuera ejemplos después despues dentro corchetes comillas ruby lambda ruby-1.9 first-class-functions

ruby - punto - reglas del parentesis



¿Por qué no es posible la llamada lambda 1.9 de Ruby sin el punto delante del paréntesis? (2)

Revisé la última versión de Ruby, para jugar un poco con los últimos cambios. Lo primero que traté de hacer fue llamar a Ruby lambda / block / proc como harías con un Python que se puede llamar.

a = lambda {|x| puts x} a.call(4) # works, and prints 4 a[4] # works and prints 4 a.(4) # same a(4) # undefined method ''a'' for main:Object

¿Por qué no es posible la última llamada? ¿Alguna vez será?


AFAIK es porque ruby ​​no te permite definir el método () para un objeto. La razón por la que no le permite definir el método () se debe probablemente al hecho de que los paréntesis son opcionales en las llamadas a métodos.

Y para lo que vale, aquí hay un truco para permitirte invocar a lambdas usando () http://github.com/coderrr/parenthesis_hacks/blob/master/lib/lambda.rb


Ruby es básicamente un 100% orientado a objetos, pero a veces intenta ocultar este hecho por ... conveniencia? ¿Familiaridad?

Básicamente, las funciones definidas "en el nivel superior" se definen realmente como métodos en un objeto global. Para hacer que funcione, una llamada sin un especificador se convierte realmente a llamar a un método con ese nombre en dicho objeto global. Este estilo hace que las cosas se vean más guión-y. Ruby está tratando de hacer eso con tu último ejemplo.

Los dos primeros ejemplos se analizan bien porque Ruby sabe que estás intentando acceder a los métodos del objeto proc; recuerda que incluso [] es solo un método que puedes definir. El que tiene el punto explícito también funciona porque el punto significa "enviar este mensaje a este objeto" (en este caso, a ).

Sé que eso no "resuelve" nada, pero espero que ayude un poco.