ruby on rails, двоеточие сзади или спереди переменных
Я новичок в Ruby и Rails обоих. Я думаю, что Rails-один из лучших API, и ruby довольно уникален, кажется, что ruby может умно делать "предположения", чтобы помочь разработчику. Но я не уверен, в какой мере.
мои вопросы касаются двоеточия в переменной.
Что я понял до сих пор, так это то, что :переменная в ruby, это сказать, что эта переменная не сможет измениться, что похоже на константу на другом языке. Я прав??
затем мое замешательство, иногда я вижу двоеточие перед переменной, как это
Rails.application.config.session_store :cookie_store,
key: '_blog_session'
<%= link_to "Delete", article, confirm: "Are you sure?",
method: :delete %>
и : и способ: есть двоеточие перед.Что это это представляете? и более того!--8-->
Blog::Application.routes.draw.do
root :to => "articles#index"
end
существуют двойные двоеточия между переменными?
теперь я предполагаю, что Blog :является одной переменной, а: Application является постоянным. в чем я сомневаюсь, потому что это не имеет смысла. Пожалуйста, просветите меня?
спасибо
2 ответов
что я понял до сих пор, так это то, что
:variable
в 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
Rails.application.config.session_store :cookie_store, key: '_blog_session'
session_store
- Это метод, который принимает два "аргумента":
(также может быть session_store :cookie_store, { key: '_blog_session' }
)
аналогично link_to "Delete", article, confirm: "Are you sure?", method: :delete
-
"Delete"
строка -
article
переменная -
{ confirm: '...', method: :delete }
хэш, гдеconfirm:
,method:
и:delete
символы снова.
пока Blog::Application
:: в основном оператор разрешения пространства имен. способ решения класса в Blog
модуль.
надеюсь, что это помогает. Взгляните на документацию, на которую я ссылался, это объясняется довольно хорошо.