web-dev-qa-db-ja.com

ruby Railsでは、変数の前後にコロン

RubyとRailsの両方が初めてです。 Railsは最高のAPIの1つであり、Rubyは非常にユニークです。Rubyは巧妙に「仮定」を行って開発者を支援できるようです。しかし、私は何が拡張されるかについてあまり確信がありません。

私の質問は、変数のコロンについてです。
これまで私が理解しているのは、Rubyの:variableは、この変数は変更できないということです。これは、他の言語の定数と同様です。私は正しいですか?

それから私の混乱は、時々私はこのように変数の前にコロンを見る

 Rails.application.config.session_store :cookie_store, 
      key: '_blog_session'
  <%= link_to "Delete", article, confirm: "Are you sure?", 
      method: :delete %>

key:method:の両方の前にコロンがあります。これは何を表していますか?そしてさらに

Blog::Application.routes.draw.do
  root :to => "articles#index"
end

変数の間に二重コロンがありますか?今、私はBlog:が1つの変数であり、:Applicationが定数であると推測しています。それは意味をなさないので、私はそれを疑います。教えてください

ありがとうございました

19
vdj4y

これまでに私が理解しているのは: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。シンボルは一度しか作成されないため、メモリ効率がよくなります。同じシンボルリテラルは常に同じオブジェクトを返します。 2つのシンボルが等しいかどうかを確認するのは、簡単な操作です。

両方とも key:およびmethod:(...)これは何を表していますか?

これはハッシュの代替構文です。 IRBに入力して結果を確認できます。

{ foo: 1, bar: 2 }
#=> {:foo=>1, :bar=>2}

変数の間に二重コロンがありますか?今私はそれを推測しているBlog:は1つの変数であり、:Applicationは定数です。

いいえ、BlogApplicationはどちらも定数であり、::はスコープ解決演算子です。ネストされた定数へのアクセスに使用できます。例:

module Foo
  class Bar
    BAZ = 123
  end
end

Foo::Bar::BAZ #=> 123
46
Stefan
Rails.application.config.session_store :cookie_store, key: '_blog_session'

session_storeは2つの「引数」を取るメソッドです。

  • :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モジュールのApplicationクラスをアドレス指定する方法。

お役に立てれば。私が参照したドキュメンテーションを見てください、それはかなりうまく説明されています。

6
wpp