klassse usa comúnmente para nombrar una variable que contiene un Classobjeto (recuerde que las clases también son objetos), como en klass = String. ¿Puede proporcionar la fuente de dónde lo ha visto para una explicación más profunda?
Chubas
5
No, no quiero proporcionar una fuente única porque no quiero que se explique así. Quiero una imagen más amplia de esto
thenengah
5
A veces, la gente usa en clazzlugar de klass(por ejemplo, en el libro "Metaprogramación de Ruby").
Andrew Grimm
2
En TV Tropes, esto se llamaría "Xtreme Kool Letterz" (sin vínculo, no es seguro para la productividad).
Andrew Grimm
Respuestas:
188
classes una palabra clave utilizada para definir una nueva clase. Dado que es una palabra clave reservada, no puede usarla como nombre de variable. No puede usar ninguna de las palabras clave de Ruby como nombres de variable, por lo que no podrá tener variables nombradas defo moduleo ifo end, etc., classno es diferente.
Por ejemplo, considere lo siguiente:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Intentar ejecutar esto da como resultado un error, ya que no se puede usar classcomo nombre de variable.
Para solucionarlo, usaremos el identificador en su klasslugar. No es especial, pero se usa convencionalmente como nombre de variable cuando se trata de una clase o nombre de clase. Es fonéticamente lo mismo, pero como no es una palabra clave reservada, Ruby no tiene problemas con ella.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Puede usar cualquier nombre de variable (no reservado) allí, pero la comunidad ha comenzado a usar klass. No tiene ninguna magia especial, solo significa "Quería usar el nombre 'clase' aquí, pero no puedo, ya que es una palabra clave reservada".
En una nota al margen, dado que lo ha escrito mal varias veces, vale la pena señalar que en Ruby, el caso es importante. Las fichas que comienzan con una letra mayúscula son constantes. A través del pico :
Un nombre constante comienza con una letra mayúscula seguida de caracteres de nombre. Los nombres de las clases y los nombres de los módulos son constantes y siguen las convenciones de nombres constantes. Por convención, las variables constantes normalmente se escriben con letras mayúsculas y guiones bajos en todas partes.
Por lo tanto, la ortografía correcta es classy klass, en lugar de Classy Klass. Los últimos serían constantes, y ambos Classy Klassson nombres de constantes válidos, pero recomendaría no usarlos por motivos de claridad.
Bueno, no solo es, Classen particular, un nombre de constante válido, ¡también existe! (es la clase Class)
Asherah
1
Wow hermoso. Entienda completamente ahora. Gracias Chris! :)
thenengah
1
Creo que el uso de klasscomo variable local proviene de Pickaxe; usaron ese nombre en un par de ejemplos, exactamente por las razones que describiste aquí.
Ken Bloom
Esto debe aplicar la versión antigua de rubí. Con Ruby 1.9.3 que usoobject_instance.class.name == 'Object'
Augustin Riedinger
No, sigue siendo exacto. La clase de Object.new es Object, pero la clase de Object es Class.
Chris Heald
22
klasstambién es un método Rails (o más bien ActiveRecord) . Se utiliza para obtener la clase de una asociación.
Como se indica en el contenido vinculado:
classAuthor<ActiveRecord::Base
has_many :books
endAuthor.reflect_on_association(:books).klass
# => Book
Uno es el nombre de una clase y el otro es solo una constante indefinida por defecto. Y para el par es más probable que veas, classy klassel primero es una palabra clave para definir clases, mientras que el segundo es solo un identificador (como cualquier otra cadena de caracteres). Se utiliza cuando le gustaría escribir la palabra "clase" pero no puede porque es una palabra clave reservada.
¿Cuál es el punto, quiero decir por qué / cómo usarlo, para qué se usa generalmente?
thenengah
3
La clase @Sam es una palabra clave reservada para definir clases. Entonces, si quieres tratar algo con una clase genérica (como la metaprogramación), no puedes escribir class = Kernel.const_get(class_name). Pero puedes escribir klass = Kernel.const_get(class_name), y eso se usa para representar "clase".
Thiago Silveira
2
El punto es que no puede usar la palabra clave 'clase' para significar 'clase' ... porque es una palabra reservada (lógica circular, lo sé), por lo que la palabra 'klass' se sustituye en su lugar. Este es un modismo común en muchos otros lenguajes, por ejemplo, Java y C #.
Scott
para que pueda asignar clases dinámicamente? Klass = object.class; Klass.new - algo así
thenengah
3
@Sam: Usar Klasspara eso sería una mala elección, ya que los identificadores que comienzan con letras mayúsculas son constantes, por lo que solo puede configurarlo una vez. Pero sí, esa es la idea general.
klass
se usa comúnmente para nombrar una variable que contiene unClass
objeto (recuerde que las clases también son objetos), como enklass = String
. ¿Puede proporcionar la fuente de dónde lo ha visto para una explicación más profunda?clazz
lugar deklass
(por ejemplo, en el libro "Metaprogramación de Ruby").Respuestas:
class
es una palabra clave utilizada para definir una nueva clase. Dado que es una palabra clave reservada, no puede usarla como nombre de variable. No puede usar ninguna de las palabras clave de Ruby como nombres de variable, por lo que no podrá tener variables nombradasdef
omodule
oif
oend
, etc.,class
no es diferente.Por ejemplo, considere lo siguiente:
Intentar ejecutar esto da como resultado un error, ya que no se puede usar
class
como nombre de variable.Para solucionarlo, usaremos el identificador en su
klass
lugar. No es especial, pero se usa convencionalmente como nombre de variable cuando se trata de una clase o nombre de clase. Es fonéticamente lo mismo, pero como no es una palabra clave reservada, Ruby no tiene problemas con ella.La salida, como se esperaba, es
Puede usar cualquier nombre de variable (no reservado) allí, pero la comunidad ha comenzado a usar
klass
. No tiene ninguna magia especial, solo significa "Quería usar el nombre 'clase' aquí, pero no puedo, ya que es una palabra clave reservada".En una nota al margen, dado que lo ha escrito mal varias veces, vale la pena señalar que en Ruby, el caso es importante. Las fichas que comienzan con una letra mayúscula son constantes. A través del pico :
Por lo tanto, la ortografía correcta es
class
yklass
, en lugar deClass
yKlass
. Los últimos serían constantes, y ambosClass
yKlass
son nombres de constantes válidos, pero recomendaría no usarlos por motivos de claridad.fuente
Class
en particular, un nombre de constante válido, ¡también existe! (es la clase Class)klass
como variable local proviene de Pickaxe; usaron ese nombre en un par de ejemplos, exactamente por las razones que describiste aquí.object_instance.class.name == 'Object'
klass
también es un método Rails (o más bien ActiveRecord) . Se utiliza para obtener la clase de una asociación.Como se indica en el contenido vinculado:
fuente
klass
yclazz
y otrosclasz
similares son errores ortográficos creativos que se utilizan para sortear una palabra reservadaclass
.Sería mucho menos irritante para los ojos de usar
class1
ocl
oclassX
o algo más que una falta de ortografía intencional.fuente
Uno es el nombre de una clase y el otro es solo una constante indefinida por defecto. Y para el par es más probable que veas,
class
yklass
el primero es una palabra clave para definir clases, mientras que el segundo es solo un identificador (como cualquier otra cadena de caracteres). Se utiliza cuando le gustaría escribir la palabra "clase" pero no puede porque es una palabra clave reservada.fuente
class = Kernel.const_get(class_name)
. Pero puedes escribirklass = Kernel.const_get(class_name)
, y eso se usa para representar "clase".Klass
para eso sería una mala elección, ya que los identificadores que comienzan con letras mayúsculas son constantes, por lo que solo puede configurarlo una vez. Pero sí, esa es la idea general.