O que é um símbolo em Ruby?

Sou totalmente novo no mundo Ruby e um pouco confuso com o conceito de Símbolos. Qual é a diferença entre símbolos e variáveis? Por que não apenas usando variáveis?

Obrigado.

Comentários

  • em Lisp – do qual Ruby é derivado – um símbolo é essencialmente o tipo de dados de uma variável; isso significa que você pode manipular o programa em um estilo de reflexão enquanto ele é executado. (não a explicação mais coerente, desculpe)

Resposta

Variáveis e símbolos são coisas diferentes. Uma variável aponta para diferentes tipos de dados. Em Ruby, um símbolo é mais parecido com uma string do que com uma variável.

Em Ruby, uma string é mutável, enquanto um símbolo é imutável. Isso significa que apenas uma cópia de um símbolo precisa ser criada. Portanto, se você ter

x = :my_str y = :my_str 

:my_str será criado apenas uma vez e x e y apontam para a mesma área da memória. Por outro lado, se você tiver

x = "my_str" y = "my_str" 

a string contém ing my_str será criado duas vezes e x e y apontará para instâncias diferentes.

Como resultado, os símbolos são freqüentemente usados como equivalentes a enums em Ruby, bem como chaves para um dicionário (hash).

Comentários

  • Basta pressionar @mipadi ' s ponto, ao comparar uma string, você precisa comparar todos os caracteres entre si. Portanto, comparar strings idênticas é O (n). Enquanto os símbolos do rubi comparam referências de objetos que são O (1).
  • Por que o Python não tem isso?
  • Você deve ter cuidado para não abusar deles também, já que, pelo que sei, mas eu não ' t olhei para isso em ruby > 1.9, símbolos don ' t get gc ' de pode consumir memória
  • Eles se comportam de forma idêntica em Smalltalk, exceto que se parecem com #mySymbol .
  • @ frogstarr78 – A menos que você esteja gerando símbolos de maneira programática (internando strings sem verificá-los primeiro), você não ' não precisa se preocupar em fazer muitos símbolos.

Resposta

Símbolo em Ruby é basicamente a mesma coisa que símbolo no mundo real. É usado para representar ou nomear algo.

Os símbolos são muito comumente usados para representar algum tipo de estado, por exemplo

order.status = :canceled order.status = :confirmed 

Você também pode ver o símbolo como enum instantâneo. Você não precisa definir um símbolo, basta usá-lo. Este artigo o explica em detalhes.

Comentários

  • Explicação melhor do que a maioria ' que pareço até agora.

Resposta

Normalmente, as variáveis tendem a ser confundidas com strings, mas posso entender que você pense nisso como uma variável. É compreensível. Pense desta forma:

O status de um jogador em um jogo é representado por um número. 1 significa vivo, 2 significa inseguro, 3 significa morto. Isso pode ser facilmente substituído por símbolos. Os símbolos podem ser :alive :unsure e :dead. Para verificar se um jogador está vivo, em vez de fazer isso:

if player_status == 1

Você pode fazer isso:

if player_status == :alive

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *