Pergunta

Se eu executar este arquivo como "ruby x.rb":

class X
end
x = X.new

O que é a coisa que está chamando "X.new"?

É um objeto / processo / etc?

Foi útil?

Solução

Tudo em Ruby ocorre no contexto de algum objeto. O objeto no nível superior é chamado de "principal". É basicamente uma instância de objeto com a propriedade especial que quaisquer métodos definidos não são adicionados como métodos de instância de Objeto (Então, eles estão disponíveis em todos os lugares).

Assim, podemos fazer um script que consiste inteiramente em:

puts object_id
@a = 'Look, I have instance variables!'
puts @a

e ele vai imprimir "105640" e "Olha, eu tenho variáveis ??de instância!".

Não é algo que você geralmente precisa se preocupar com, mas ele está lá.

Outras dicas

O chamador de nível superior é um objecto principal, o qual é da classe de objecto.

Tente este programa ruby:

p self
p self.class

É a classe X. Você está invocando o método "novo" que cria um objeto da classe X. Então, se você executar este texto como um script, Ruby:

  • cria uma nova classe X, que é uma sub-classe de objecto, e que automaticamente (como uma subclasse de Object) herda alguns métodos, dos quais um é new.
  • estabelece um x nome
  • chama o método new nessa nova X classe, criando um objeto instância X; x obtém uma referência a esse objeto.

É o interpretador Ruby rodando a linha

x = X.new

Tal como acontece com muitas linguagens de script, o script é interpretado de cima para baixo, em vez de ter um método de ponto de entrada padrão como a maioria das linguagens compiladas.

Como Charlie Martin disse, X.new é uma chamada para o construtor na classe X, que devolve um objecto do tipo X, armazenados na variável X.

Com base no seu título, eu acho que você está procurando um pouco mais. Ruby tem nenhuma necessidade para um principal, que executa o código na ordem em que ele vê. Então dependências devem ser incluídas antes que eles são chamados.

Portanto, o seu principal é qualquer código de estilo processual que está escrito fora de uma definição de classe ou módulo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top