9
votes

Quels sont les symboles et comment les utilisons-nous?

Je ne comprends pas ce qu'est une table de symboles. Quelqu'un peut-il m'aider à comprendre les symboles, des bases mêmes et expliquer soigneusement.


2 commentaires

Il serait utile que vous disiez quel fond vous avez - par exemple, connaissez-vous une autre langue? Le savez-vous bien, ou vous êtes un débutant dans la programmation?


Bonjour Arsen7: J'ai programmé environ 2 ans, Java et Objectif C. Établissez Ruby depuis le début du mois de juin et je suis maintenant arrivé à un arrêt complet avec les symboles, et je veux vraiment les comprendre car ils sont fréquemment utilisés.


4 Réponses :


0
votes

Je suppose que vous parlez de symboles qui sont écrits comme ce : quelque chose code>.

Les symboles sont des cordes, avec la différence qu'ils sont "singleton" (pour ainsi dire). p>

Par exemple, P>

a = :hello
b = :hello


0 commentaires

12
votes

L'utilisation de base des symboles est bien résumée avec la phrase: « Un symbole est un entier constant avec le nom lisible par l'homme » em> (par Wei Lie Sho)

Si en C vous tapez ceci. : p>

p :yay if :foo > :bar 


7 commentaires

Arsen7: Merci, alors ils sont comme un entier constant, seulement avec un nom lisible humain? Je commence peut-être à le comprendre, pourriez-vous expliquer un litte plus ici? "... Donc, un symbole dans Ruby est juste une certaine valeur, dans laquelle la seule chose importante est le nom. C'est un nom pour vous - le programmateur". Désolé de vous déranger trop.


C'est un plaisir ;-) Oui, vous comprenez bien - "une constante avec le nom lisible humain" est un résumé parfait. Contrairement aux constantes de type C, vous pouvez facilement convertir un symbole rubis en chaîne: : admin.to_s => "admin" , et vice-versa (cependant qui peut être un peu dangereux si vous convertissez Cordes fournies par l'utilisateur dans des symboles - une éventuelle Attaque DOS à votre application).


Arsen7: Merci beaucoup, mais si les symboles sont des entiers constants avec un nom lisible, quelle est la valeur d'un symbole? Et je suis un peu sûr de cette phrase: "... Donc, un symbole de Ruby est juste une certaine valeur, dans laquelle la seule chose importante est le nom. C'est un nom pour vous - le programmateur". Je pense au nom-partie ..


Sous la capuche du symbole, il y a une valeur entière (une certaine adresse), mais cet entier n'est pas quelque chose que vous pouvez compter, ni quelque chose que vous devriez considérer comme important. Dans chaque exécution de votre programme, la valeur entière d'un symbole donné sera différente, mais alors que le programme est en cours d'exécution, chaque "instance" appels-it) du même symbole aura la même valeur entière. Donc, vous pouvez comparer deux symboles aussi rapides que les entiers sont comparés, mais si vous stockez le symbole en dehors de votre programme, vous devez utiliser son nom. En général, la valeur entière d'un symbole n'est totalement pas importante.


En d'autres termes - vous utilisez des symboles uniquement pour comparer si "quelque chose" est égal à "quelque chose". Par exemple, vous ne pouvez pas trier directement les symboles. Un symbole n'est égal ou pas égal à un autre. Bien sûr, vous pouvez trier les équivalents de chaîne de symboles: [: un,: deux] .sort_by (&: to_s)


Arsen7: Merci d'être patient. Je ne suis pas sûr à 100% sur quels symboles sont, mais j'ai probablement besoin de penser à une litre à leur sujet. Je devrais peut-être vous poser à nouveau ici dans le champ de commentaire.


Je ne sais pas ou je me soucie vraiment de Ruby, mais c'est l'une des meilleures réponses que j'ai vues.



0
votes

Je vois que vous savez Java. Eh bien, la chose la plus proche à une chaîne Java dans Ruby est un symbole: vous ne pouvez pas les changer et les chaînes avec le même contenu sont en fait le même objet.

irb(main):006:0> a = "secondthing"
=> "secondthing"
irb(main):007:0> b = "secondthing"
=> "secondthing"
irb(main):009:0> p a.object_id, b.object_id
8746200
8760220
=> [8746200, 8760220]


0 commentaires

2
votes

Un symbole rubis est un pointeur à un endroit en mémoire où il y a une chaîne constante. Et tous les symboles identiques pointent sur le même endroit en mémoire.

Un pointeur est juste un entier représentant une adresse en mémoire, où les adresses de la mémoire ressemblent beaucoup aux adresses de maisons dans une ville. Et chaque adresse est unique. En effet, Ruby transforme chaque symbole en un seul entier: l'adresse d'une chaîne constante en mémoire. P>

Pour que RUBY comparaisse deux chaînes, Ruby commence par la première lettre de chaque chaîne et compare leur ASCII codes. S'ils sont identiques, alors Ruby passe sur la deuxième lettre de chaque chaîne pour comparer leurs codes ASCII - jusqu'à ce que Ruby trouve une différence dans les codes ASCII ou la fin de l'une des cordes est atteinte. Par exemple, avec ces deux chaînes: p>

if 245678 == 345789
  #then the symbols are the same
else
  #the symbols are not the same
end


0 commentaires