2011-03-12 19 views
37

tengo curiosidad por qué método relacionado con la introspección de Ruby para comprobar si un objeto responde a un método es respond_to? en lugar de responds_to?¿Por qué Ruby usa responder_a? en lugar de responde_ a?

Siempre parece incómodo para mí, pero tal vez eso es porque estoy acostumbrado a respondsToSelector en Objective-C.

+1

Quizás esté tratando de ser imperativo: oye, tú te opones, ¡RESPONDEN! – julkiewicz

+0

¡No puedo creer que esta pregunta no se haya hecho antes! –

Respuesta

66

Matz prefers segundos persona singular o tercera persona del plural: "? Responds_to"

probablemente haga más sentido a los hablantes de inglés que "respon_to?".

Quizás. Pero soy japonés Ruby no es Inglés. Es la regla de nomenclatura básica para evitar la tercera persona en singular en las bibliotecas estándar.

you = Human.new 
    if you.respond_to?(:knock) 
    ... 
    end 
+1

Creo que no es que Matz prefiera la segunda persona del singular o la tercera persona del plural, sino que prefiere la forma predeterminada (hasta el infinitivo) de un verbo. – sawa

+0

@sawa como la "forma de diccionario" (si ese es el término correcto para 辞書 形) de los verbos japoneses? –

+0

Sí. Pero el japonés no tiene un acuerdo de número de persona, por lo que no hay diferencia en japonés. Generalmente se llama 終止 形 (la forma final). – sawa

7

¿Cómo sabe que el receptor es siempre la tercera persona singular? Es posible que el receptor sea I, we, you o they, o alguna otra cosa que represente la pluralidad. En ese caso, ¿seguirá diciendo que responds_to? es más natural que respond_to?? Para preservar la generalidad, es mejor nombrar un método de la forma más general posible. En lugar de dar un nombre a un método en tercera persona del singular, tiene más sentido asignarle el nombre predeterminado en a-infinitivo, que también se usa en los diccionarios.

+1

Supongo que siempre pienso en el receptor como 'eso'. – nroose

Cuestiones relacionadas