ruby on rails,冒号后面或前面的变量

时间:2015-02-05 08:08:10

标签: ruby-on-rails ruby variables constants colon

我是ruby的新手,并且两者兼而有之。我认为Rails是最好的API之一,而且ruby非常独特,似乎ruby可以巧妙地做“假设”来帮助开发人员。但我不太清楚延伸到什么程度。

我的问题是变量中的冒号。
到目前为止我所理解的是ruby中的:variable ,就是说这个变量将无法改变,这与其他语言中的常量相似。我对么??

然后我的困惑是,有时我看到变量前面的冒号,像这样

 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:是一个变量,而且:应用程序是不变的。我怀疑它是什么,因为它没有意义。请赐教?

谢谢

3 个答案:

答案 0 :(得分:46)

  

到目前为止我所理解的是红宝石中的: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是常数。

不,BlogApplication都是常量,::是范围解析运算符。它可用于访问嵌套常量,例如:

module Foo
  class Bar
    BAZ = 123
  end
end

Foo::Bar::BAZ #=> 123

答案 1 :(得分:6)

Rails.application.config.session_store :cookie_store, key: '_blog_session'

session_store是一种采用两个“参数”的方法:

  • :cookie_storeSymbol
  • 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 }哈希,其中confirm:method::delete再次为符号。

虽然Blog::Application :: is basically a namespace resolution operator.是您在Blog模块中解决Application类的方法。

希望这会有所帮助。看看我引用的文档,它的解释相当不错。

答案 2 :(得分:0)

:presence => 真

存在:真实

在底部的示例中,冒号表示:“嘿,我是从存在指向真实。