我是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:是一个变量,而且:应用程序是不变的。我怀疑它是什么,因为它没有意义。请赐教?
谢谢
答案 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
是常数。
不,Blog
和Application
都是常量,::
是范围解析运算符。它可用于访问嵌套常量,例如:
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
是一种采用两个“参数”的方法:
(也可能是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 => 真
存在:真实
在底部的示例中,冒号表示:“嘿,我是从存在指向真实。