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

Рубин на рельсах, двоеточие за спиной или перед переменными

Я новичок в рубине, и рельсы оба. Я думаю, что 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: одна переменная, и: приложение является постоянным. который я сомневаюсь, потому что это не имеет смысла. Пожалуйста, просветите меня?

благодарю вас

4b9b3361

Ответ 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.

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