Рубин и: символы - PullRequest
       5

Рубин и: символы

2 голосов
/ 25 августа 2010

Я только начал использовать Ruby и читаю «Программирование на Ruby 1.9 - Прагматическое руководство для программиста».Я сталкивался с тем, что называется символами, но как разработчик PHP я не понимаю, что они делают и для чего они хороши.

Может кто-нибудь помочь мне с этим?

Ответы [ 4 ]

4 голосов
/ 25 августа 2010

Полезно думать о символах в терминах «вещь, которая называется».Другими словами, банан имеет в виду «вещь, называемая бананом».Они широко используются в Ruby, в основном как ключи Hash (ассоциативный массив).

Они действительно похожи на строки, но за кулисами сильно отличаются.Одно ключевое отличие состоит в том, что в памяти существует только один конкретный символ.Так что, если вы упоминаете: banana 10 раз в своем коде, создается только один экземпляр: banana, и все они ссылаются на него.Это также означает, что они неизменны.

3 голосов
/ 25 августа 2010

Символы похожи на строковые литералы в том смысле, что разделяют одно и то же пространство памяти, но важно отметить, что они не строковые эквиваленты.

В Ruby, когда вы набираете "this" и "this", вы используете две разные области памяти;используя символы, вы будете использовать только одно имя во время выполнения программы.Поэтому, если вы наберете :this в нескольких местах вашей программы, вы будете использовать только одно.

С Символ Документ:

Объекты символов представляют имена и некоторые строки внутри интерпретатора Ruby.Они генерируются с использованием синтаксиса литералов :name и :"string" и различными методами to_sym.Один и тот же объект Symbol будет создан для данного имени или строки на время выполнения программы, независимо от контекста или значения этого имени.Таким образом, если Fred является константой в одном контексте, методом в другом и классом в третьем, Символ :Fred будет одним и тем же объектом во всех трех контекстах.

Таким образом, вы в основном используете его там, где хотите трактовать строку как константу.

Например, очень часто его используют с методом attr_accessor, чтобы определить getter / setter для атрибута.

class Person 
   attr_accessor :name 
end
p = Person.new
p.name= "Oscar"

Но это будет делать то же самое:

class DontDoThis
   attr_accessor( "name" )
end
ddt = DontDoThis.new
ddt.name= "Dont do it"
0 голосов
/ 25 августа 2010

@ AboutRuby дает хороший ответ, используя термины «вещь под названием».

: банан означает «вещь под названием банан».

Онотмечает, что вы можете сослаться на: banana много раз в коде и на один и тот же объект - даже в разных областях или в какой-то странной библиотеке.Банан это то, что называется банан, что бы это ни значило, когда вы его используете.

Они используются как

  • ключи для массивов, так что вы смотрите: банан, у вас есть только одинзапись.В большинстве языков, если это строки, вы рискуете иметь несколько строк в памяти с текстом «банан» и не иметь кода, обнаруживающего, что они являются одинаковыми
  • именами методов / процедур.Большинство людей знакомы с тем, как C отличает метод от его вызова с помощью круглых скобок: my_method vs. my_method ().В Ruby, поскольку круглые скобки являются необязательными, они оба указывают на вызов этого метода.Символ, однако, удобно использовать в качестве самостоятельного для методов (даже при том, что между символом и методом действительно нет никакой связи).
  • перечисления (и другие константы).Поскольку они не меняются, они обладают многими свойствами этих функций из других языков.
0 голосов
/ 25 августа 2010

Думайте о символе как о:

  • Имя метода, который вы планируете использовать позже
  • Константа / перечисление, которое вы хотите сохранить и сравнить с

Например:

s = "FooBar"
length = s.send(:length)
>>> 6
...