В новинку для направляющих и пытающийся получить мою голову вокруг, когда/почему использовать :symbols
, @ivars
, "strings"
в платформе.
Я думаю, что понимаю различия между ними концептуально
:symbol
экземпляр на проект@ivar
на экземпляр"strings"
- поскольку они создаются каждый раз, когда ссылается (?)Не стесняйтесь исправлять меня!
Основной беспорядок прибывает из понимания правил и конвенций того, какие направляющие ожидает - где и ПОЧЕМУ?
Я уверен, что ха существует "А-ч!" момент приезжая, но у меня не было его еще..., поскольку это кажется довольно произвольным мне (прибывающий из C/Obj-C).
- спасибо
Переменные экземпляра довольно просты: они отслеживают свойства/значения конкретного экземпляра, поэтому вы используете их, когда значения варьируются между экземплярами.
Символы и строки - это более произвольный подход. Символы обычно используются для постоянных значений, точно так же, как в таких языках, как C, используются перечисления; в Ruby нет перечислений, поэтому символы часто используются для заполнения этого пробела. Строки используются для более разнообразных фрагментов текста, которые не будут использоваться в качестве флага или подобной константы.
@instance_variable
- это переменная экземпляра. Обычно она определяется в контроллере и доступна в представлениях.
The "string"
- это строка, как и в любом другом языке.
Символ :symbol
, как вы уже сказали, это эффективный способ представления имен и строк; это буквальные значения. Он инициализируется и существует только один раз во время сессии ruby. Это не строка, поскольку у вас нет доступа к методам String; это Symbol. Кроме того, он неизменяем. По этим причинам он становится очень удобным для представления ключей в хэшах. Методы Rails используют хэши, поэтому символы встречаются в Rails повсюду.
Переменные экземпляра на самом деле не принадлежат к одному списку со строками и символами. Строки и символы - это типы классов, тогда как переменные экземпляра - это тип переменной. Таким образом, переменные экземпляра (@var
) - это просто способ хранения значения между методами одного экземпляра одного класса:
class Calculator
@counter = 0
def inc
@counter += 1
end
def dec
@counter -= 1
end
end
Вот хорошая статья о различии между символами и строками.
Символы - это что-то вроде указателей (не в 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 помогает. Удачи в кодировании!