Подтвердить что ты не робот

Ruby on Rails-: символы, @iVars и "струны" - о, мой!

Новое для Rails и попытка разгадать, когда/зачем использовать :symbols, @ivars, "strings" в рамках.

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

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

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

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

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

-спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

: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

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

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

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

Ответ 5

Контроллер Rails получает доступ к базе данных рельсов через модели по ORM (сопоставление объектных привязок), т.е. класс модели будет сопоставлен с соответствующей таблицей, а объекты непосредственно сопоставляются с строками в таблице. Чтобы получить результаты для заданного пользовательского запроса, переменная экземпляра (@instance_variable) является идеальным выбором для решения этой проблемы.