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 - Это метод, который принимает два "аргумента":

  • :cookie_store это символ
  • key: '_blog_session' на самом деле короткий способ написания хэш.

(также может быть 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 модуль.

надеюсь, что это помогает. Взгляните на документацию, на которую я ссылался, это объясняется довольно хорошо.