Рубин на рельсах, двоеточие за спиной или перед переменными
Я новичок в рубине, и рельсы оба. Я думаю, что Rails - один из лучших API, и рубин совершенно уникален, похоже, что Ruby умеет "делать допущения", чтобы помочь разработчику. Но я не уверен, в какой степени.
мои вопросы касаются двоеточия в переменной.
До сих пор я понял, что : переменная в ruby, означает, что эта переменная не сможет измениться, что аналогично константе на другом языке. Я прав??
Тогда мое замешательство, иногда я вижу двоеточие infront переменной, как это
Rails.application.config.session_store :cookie_store,
key: '_blog_session'
<%= link_to "Delete", article, confirm: "Are you sure?",
method: :delete %>
Оба ключа : и : имеют двоеточие в передней части. Что это значит?
и более того
Blog::Application.routes.draw.do
root :to => "articles#index"
end
Есть два двойника между переменными?
теперь я догадываюсь, что Blog: одна переменная, и: приложение является постоянным. который я сомневаюсь, потому что это не имеет смысла. Пожалуйста, просветите меня?
благодарю вас
Ответы
Ответ 1
То, что я понял до сих пор, состоит в том, что :variable
в ruby, означает, что эта переменная не сможет измениться, что похоже на константу на другом языке.
Я не уверен, понимаю ли я это утверждение. В Ruby константы начинаются с буквы верхнего регистра:
Foo = 1
Перераспределение создает предупреждение:
Foo = 1
Foo = 2 #=> warning: already initialized constant Foo
Переменные начинаются с строчной буквы и переназначения не вызывают предупреждения (они должны меняться):
foo = 1
foo = 2 # no warning
Символы начинаются с двоеточия:
:a_symbol
:Uppercase_symbol
:"i'm a symbol, too"
Они часто представляют статические значения, например. :get
и :post
. Символы являются эффективными с точки зрения памяти, потому что они создаются только один раз - один и тот же символьный литерал всегда возвращает один и тот же объект. Проверка равенства двух символов - дешевая операция.
Оба key:
и method:
(...) Что это значит?
Это альтернативный синтаксис для хэшей. Вы можете ввести его в IRB, чтобы увидеть результат:
{ foo: 1, bar: 2 }
#=> {:foo=>1, :bar=>2}
Есть два двойника между переменными? теперь я предполагаю, что Blog:
- одна переменная, а :Application
постоянна.
Нет, Blog
и Application
- обе константы, а ::
- оператор разрешения области. Его можно использовать для доступа к вложенным константам, например:
module Foo
class Bar
BAZ = 123
end
end
Foo::Bar::BAZ #=> 123
Ответ 2
Rails.application.config.session_store :cookie_store, key: '_blog_session'
session_store
- это метод, который принимает два "аргумента":
-
:cookie_store
является Symbol
-
key: '_blog_session'
- это на самом деле короткий способ записи Hash.
(также может быть session_store :cookie_store, { key: '_blog_session' }
)
Аналогично для link_to "Delete", article, confirm: "Are you sure?", method: :delete
-
"Delete"
- строка
-
article
переменная
-
{ confirm: '...', method: :delete }
hash, где confirm:
, method:
и :delete
снова являются символами.
Хотя Blog::Application
:: - это в основном оператор разрешения пространства имен. Способ обращения к классу Application в модуле Blog
.
Надеюсь, это поможет. Взгляните на документацию, на которую я ссылаюсь, это объясняется довольно красиво.