2012-05-18 22 views

Respuesta

34

Los puntos en este contexto denotan un hash literal.

factory es la clave Hash, :user es el valor.

La sintaxis alternativa es :factory => :user. Quieren decir lo mismo.

+10

Tenga en cuenta que la sintaxis sin hashrocket se agregó en Ruby 1.9 y no existe en versiones anteriores. –

+0

Entonces, en este contexto, ':' es '=>'? – Roman

+0

Sí, es solo una nueva forma de escribir Hashes que se introdujo en Ruby 1.9, posiblemente porque es un poco más conciso que la => sintaxis. – OzBandit

16

Rubí 1,8 sintaxis:

:factory => :user 

Ruby 1.9 sintaxis:

factory: :user 

Tenga en cuenta que la sintaxis de Ruby 1.8 funciona en 1.9 también.

+2

¿Cuál fue la razón detrás de agregar esta nueva sintaxis? Creo que se lee peor que los cohetes/flechas, que comúnmente se entiende que representan mapeos. – Matthias

+2

No estoy seguro de por qué fue cambiado. Busqué en Google y no encuentro ninguna discusión obvia al respecto. Si encuentra algunos antecedentes pls publicarlo, estoy interesado. Thanks1 –

+0

Este cambio puede tener algo que ver con la forma en que JavaScript y tal vez otros lenguajes manejan la notación literal del objeto. Por ejemplo, en JavaScript, que podemos hacer: 'persona var = { nombre: "Juan", edad: 42 años, casado : false}' así que realmente, cuando estamos pasando 'fábrica: : user', lo que realmente estamos haciendo es pasar '{factory:: user}', también escrito como '{: factory =>: user}'. La sintaxis 1.9 está diseñada para hacer más fácil hacer algo como '{fábrica:" usuario "}' –

0

Las otras respuestas son correctas. Hubo algunas especulaciones con respecto a la razón de ser de esta nueva sintaxis. Este cambio puede tener algo que ver con cómo Javascript y quizás otros lenguajes manejan la notación literal del objeto. Se sintió la necesidad, tal vez, de poner Ruby más en línea con la forma en que estos lenguajes manejan la creación de objetos.

Por ejemplo, en JavaScript, que podemos hacer:

var person = { 
    name: "John", 
    age: 42, 
    married: false 
} 

Así que en realidad, cuando estamos pasando factory: :user, lo que realmente estamos haciendo es pasar {factory: :user}, también escrito como {:factory => :user}. La sintaxis 1.9 tiene como objetivo facilitar la realización de algo como {factory: "user"}

+0

Siento que esta es una forma mucho mejor de especificar un hash (podría estar sesgado ya que proviene de los dictados de Python) Incluso desde la perspectiva de POLA y de la felicidad del programador que ruby ​​y RoR respaldan tan entusiastamente, el hashrocket heavy-mecanografiado fue un duro pulgar en mi opinión. Es bueno que tengamos la opción de usar la notación de dos puntos ahora. – Shreyas

Cuestiones relacionadas