【问题标题】:ruby on rails, colon at back or front of variablesruby on rails,变量后面或前面的冒号
【发布时间】:2015-04-05 00:23:55
【问题描述】:

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

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

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

 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: 是一个变量,而 :Application 是常量。我怀疑它是,因为它没有意义。请赐教?

谢谢

【问题讨论】:

  • 这既不是变量也不是常数。它是 Ruby Symbol 的字面语法。 Blog::Application 语法与符号无关,它与解析 namespaces 有关。
  • 澄清一下,你的意思是博客是一个命名空间吗?或者 Application 是一个命名空间?前面的冒号呢,比如方法:或键:
  • 博客是命名空间。看看我提供的链接。 {method: 'delete'}等语法是哈希语法,相当于{:method =&gt; 'delete'}
  • 我明白了。我会检查你的链接,谢谢。那我应该给你分数。 :)

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


【解决方案1】:

目前我的理解是ruby中的: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

【讨论】:

  • @Stefan 又一困惑 params = { } params[mehtods:] = :delete syntax error, unexpected '] ` 但是如果 params[:mehtods] = :delete 现在很好,为什么?
  • @VinayGupta 替代语法仅适用于键值 pairs,例如{ method: :delete }。否则,冒号总是先出现。
  • 非常简洁。喜欢这个答案
【解决方案2】:
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 类的一种方式。

希望这会有所帮助。看看我引用的文档,它解释得很好。

【讨论】:

  • confirm: "Are you sure?", method: :delete一个 哈希,而不是两个
【解决方案3】:

:存在 => 真

存在:真实

在下面的示例中,冒号表示:“嘿,我正在从存在指向真实。

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2015-03-17
    • 2016-06-20
    • 1970-01-01
    • 2011-09-09
    • 2012-12-28
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多