klassé comumente usado para nomear uma variável que contém um Classobjeto (lembre-se de que as classes também são objetos), como em klass = String. Você pode fornecer a fonte de onde você viu isso para uma explicação mais profunda?
Chubas
5
Não, não quero fornecer uma única fonte porque não quero que seja explicado assim. Eu quero uma imagem maior sobre isso
thenengah
5
Às vezes, as pessoas usam em clazzvez de klass(por exemplo, no livro "Metaprogramming Ruby").
Andrew Grimm
2
Na TV Tropes, isso seria chamado de "Xtreme Kool Letterz" (sem link - não é seguro para a produtividade).
Andrew Grimm
Respostas:
188
classé uma palavra-chave usada para definir uma nova classe. Por ser uma palavra-chave reservada, você não pode usá-la como nome de variável. Você não pode usar nenhuma das palavras-chave do Ruby como nomes de variáveis, então você não será capaz de ter variáveis nomeadas defou moduleou ifou end, etc - classnão é diferente.
Para consertar, usaremos o identificador klass. Não é especial, mas é convencionalmente usado como um nome de variável quando você está lidando com uma classe ou nome de classe. É foneticamente o mesmo, mas como não é uma palavra-chave reservada, Ruby não tem problemas com ela.
Você poderia usar qualquer nome de variável (não reservado) lá, mas a comunidade começou a usar klass. Não tem nenhuma mágica especial - significa apenas "Eu queria usar o nome 'classe' aqui, mas não posso, pois é uma palavra-chave reservada".
Em uma nota lateral, já que você digitou errado algumas vezes, é importante notar que em Ruby, o caso importa. Os tokens que começam com uma letra maiúscula são constantes. Via o Picareta :
Um nome constante começa com uma letra maiúscula seguida por caracteres de nome. Os nomes das classes e dos módulos são constantes e seguem as convenções de nomenclatura de constantes. Por convenção, as variáveis constantes são normalmente escritas com letras maiúsculas e sublinhados.
Assim, a grafia correta é classe klass, em vez de Classe Klass. Os últimos seriam constantes, e ambos Classe Klasssão nomes de constantes válidos, mas eu não recomendaria usá-los para fins de clareza.
Bem, não é apenas Classum nome constante válido, mas também existente! (é a aula)
Asherah
1
Uau lindo. Compreenda completamente agora. Obrigado Chris! :)
thenengah
1
Acho que o uso de klasscomo uma variável local vem da Picareta - eles usaram esse nome em alguns exemplos, exatamente pelas razões que você descreveu aqui.
Ken Bloom
Isso deve ser aplicado à versão antiga do ruby. Com Ruby 1.9.3 eu usoobject_instance.class.name == 'Object'
Augustin Riedinger
Não, ainda está correto. A classe de Object.new é Object, mas a classe de Object é Class.
Chris Heald
22
klasstambém é um método Rails (ou melhor, ActiveRecord) . É usado para obter a classe de uma associação.
Conforme declarado no conteúdo do link:
classAuthor<ActiveRecord::Base
has_many :booksendAuthor.reflect_on_association(:books).klass# => Book
Um é o nome de uma classe e o outro é apenas uma constante indefinida por padrão. E para o par, você provavelmente verá, classe klass, a primeira é uma palavra-chave para definir classes, enquanto a última é apenas um identificador (como qualquer outra sequência de caracteres). É usado quando você gostaria de escrever a palavra "classe", mas não pode porque é uma palavra-chave reservada.
Qual é o ponto, quero dizer, por que / como usá-lo, para que geralmente é usado?
thenengah
3
@Sam class é uma palavra-chave reservada para definir classes. Portanto, se você quiser lidar com uma classe genérica (como metaprogramação), não poderá escrever class = Kernel.const_get(class_name). Mas você pode escrever klass = Kernel.const_get(class_name), e isso é usado para representar "classe".
Thiago Silveira
2
A questão é que você não pode usar a palavra-chave 'classe' para significar 'classe' ... porque é uma palavra reservada (lógica circular, eu sei), então a palavra 'klass' é substituída. Este é um idioma comum em muitas outras linguagens, por exemplo, Java e C #.
Scott
para que você possa atribuir turmas dinamicamente? Klass = object.class; Klass.new - algo assim
thenengah
3
@ Sam: Usar Klasspara isso seria uma escolha ruim, já que identificadores que começam com letras maiúsculas são constantes, então você só poderia defini-los uma vez. Mas sim, essa é a ideia geral.
klass
é comumente usado para nomear uma variável que contém umClass
objeto (lembre-se de que as classes também são objetos), como emklass = String
. Você pode fornecer a fonte de onde você viu isso para uma explicação mais profunda?clazz
vez deklass
(por exemplo, no livro "Metaprogramming Ruby").Respostas:
class
é uma palavra-chave usada para definir uma nova classe. Por ser uma palavra-chave reservada, você não pode usá-la como nome de variável. Você não pode usar nenhuma das palavras-chave do Ruby como nomes de variáveis, então você não será capaz de ter variáveis nomeadasdef
oumodule
ouif
ouend
, etc -class
não é diferente.Por exemplo, considere o seguinte:
Tentar executar isso resulta em um erro, pois você não pode usar
class
como um nome de variável.Para consertar, usaremos o identificador
klass
. Não é especial, mas é convencionalmente usado como um nome de variável quando você está lidando com uma classe ou nome de classe. É foneticamente o mesmo, mas como não é uma palavra-chave reservada, Ruby não tem problemas com ela.A saída, como esperado, é
Você poderia usar qualquer nome de variável (não reservado) lá, mas a comunidade começou a usar
klass
. Não tem nenhuma mágica especial - significa apenas "Eu queria usar o nome 'classe' aqui, mas não posso, pois é uma palavra-chave reservada".Em uma nota lateral, já que você digitou errado algumas vezes, é importante notar que em Ruby, o caso importa. Os tokens que começam com uma letra maiúscula são constantes. Via o Picareta :
Assim, a grafia correta é
class
eklass
, em vez deClass
eKlass
. Os últimos seriam constantes, e ambosClass
eKlass
são nomes de constantes válidos, mas eu não recomendaria usá-los para fins de clareza.fonte
Class
um nome constante válido, mas também existente! (é a aula)klass
como uma variável local vem da Picareta - eles usaram esse nome em alguns exemplos, exatamente pelas razões que você descreveu aqui.object_instance.class.name == 'Object'
klass
também é um método Rails (ou melhor, ActiveRecord) . É usado para obter a classe de uma associação.Conforme declarado no conteúdo do link:
fonte
klass
andclazz
andclasz
and like são erros de ortografia criativos usados para contornar uma palavra reservadaclass
.Seria muito menos chocante para os olhos usar
class1
oucl
ouclassX
ou algo do que um erro de ortografia intencional.fonte
Um é o nome de uma classe e o outro é apenas uma constante indefinida por padrão. E para o par, você provavelmente verá,
class
eklass
, a primeira é uma palavra-chave para definir classes, enquanto a última é apenas um identificador (como qualquer outra sequência de caracteres). É usado quando você gostaria de escrever a palavra "classe", mas não pode porque é uma palavra-chave reservada.fonte
class = Kernel.const_get(class_name)
. Mas você pode escreverklass = Kernel.const_get(class_name)
, e isso é usado para representar "classe".Klass
para isso seria uma escolha ruim, já que identificadores que começam com letras maiúsculas são constantes, então você só poderia defini-los uma vez. Mas sim, essa é a ideia geral.