Ruby on Rails: символы, @iVars и “строки” - о, мой!

В новинку для направляющих и пытающийся получить мою голову вокруг, когда/почему использовать :symbols, @ivars , "strings" в платформе.

Я думаю, что понимаю различия между ними концептуально

  • только один :symbol экземпляр на проект
  • один @ivar на экземпляр
  • несколько "strings" - поскольку они создаются каждый раз, когда ссылается (?)

Не стесняйтесь исправлять меня!

Основной беспорядок прибывает из понимания правил и конвенций того, какие направляющие ожидает - где и ПОЧЕМУ?

Я уверен, что ха существует "А-ч!" момент приезжая, но у меня не было его еще..., поскольку это кажется довольно произвольным мне (прибывающий из C/Obj-C).

- спасибо

21
задан John Topley 8 June 2010 в 19:11
поделиться

4 ответа

Переменные экземпляра довольно просты: они отслеживают свойства/значения конкретного экземпляра, поэтому вы используете их, когда значения варьируются между экземплярами.

Символы и строки - это более произвольный подход. Символы обычно используются для постоянных значений, точно так же, как в таких языках, как C, используются перечисления; в Ruby нет перечислений, поэтому символы часто используются для заполнения этого пробела. Строки используются для более разнообразных фрагментов текста, которые не будут использоваться в качестве флага или подобной константы.

4
ответ дан 29 November 2019 в 21:47
поделиться

@instance_variable - это переменная экземпляра. Обычно она определяется в контроллере и доступна в представлениях.

The "string" - это строка, как и в любом другом языке.

Символ :symbol, как вы уже сказали, это эффективный способ представления имен и строк; это буквальные значения. Он инициализируется и существует только один раз во время сессии ruby. Это не строка, поскольку у вас нет доступа к методам String; это Symbol. Кроме того, он неизменяем. По этим причинам он становится очень удобным для представления ключей в хэшах. Методы Rails используют хэши, поэтому символы встречаются в Rails повсюду.

15
ответ дан 29 November 2019 в 21:47
поделиться

Переменные экземпляра на самом деле не принадлежат к одному списку со строками и символами. Строки и символы - это типы классов, тогда как переменные экземпляра - это тип переменной. Таким образом, переменные экземпляра (@var) - это просто способ хранения значения между методами одного экземпляра одного класса:

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

Вот хорошая статья о различии между символами и строками.

1
ответ дан 29 November 2019 в 21:47
поделиться

Символы - это что-то вроде указателей (не в C-шном смысле, но в C-шном мышлении они указывают). Ну, вы используете символы, когда манипулируете свойствами. Это одно из главных преимуществ динамической типизации, если вы спросите меня. (Для потенциальных избирателей я не хочу ничего плохого, я знаю, что они не указатели, но для меня это было а-ха).

:action => "index"

Переменные экземпляра нужны, когда вы получаете данные из вашей модели и хотите использовать их во всех ваших представлениях (внутри метода контроллера).

def my_controller_method
@myposts = Post.find(:all)
end

# inside view
<% for @myposts do |m| %>
<i><%= m.title %></i>
<% end %>

Просто предупреждаю, что правила и соглашения быстро меняются (как я обнаружил во время своего путешествия по Rails), причем довольно часто на каждую версию, и наличие правильного руководства с правильным Rails помогает. Удачи в кодировании!

4
ответ дан 29 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: