您好我是红宝石新手:)我正在尝试寻找解释,以理解在其语法中使用':'。
E.g:
test "should create product" do
assert_difference('Product.count') do
post :create, product: @update
end
end
我们何时执行:something
而不是something:
有什么区别。如果这是可谷歌的,请给我一些关于谷歌关于这个主题的关键字的一些指示。到目前为止,Ruby Colon的变化产生了许多不相关的结果。
答案 0 :(得分:6)
在这种情况下,您使用两个参数调用函数post
,第一个参数是符号:create
,第二个参数是密钥:product
和值{{ 1}}。
这一行可以重写如下:
@update
在Ruby 1.9中引入了post(:create, {:product => @update})
样式。
答案 1 :(得分:2)
在这两种情况下,:foo
都会引用符号:foo
。
但是,在第一种情况下,Symbol作为值传递给post
方法。在第二种情况下,符号:foo
用作哈希的键。
您可以将该行重写为
post :create, :product => @update
是
的压缩版本post :create, { :product => @update }
在后一版本中,:product
更为明确是Hash的关键。
从Ruby 1.9开始,您可以使用
定义哈希foo: "bar"
而不是
:foo => "bar"
1.9语法已被大量采用,因为与“Rocket语法”(版本:foo => "bar"
)相比,它更简洁。
答案 2 :(得分:2)
答案 3 :(得分:1)
简短版本是:
Symbol
字面值(例如:name
,:'string'
或:"string"
)Hash
文字中跟随标识符时,冒号会标识作为符号的键,如{key: value}
中所示。def foo(param1: 1, param2: 2)
,foo(param1: 1, param2: 2)
)。在某些情况下,这些命名参数也被解释为散列键。由于此时有no definitive source for the Ruby language,因此很难将您指向特定来源。我建议您咨询Ruby documentation site并找到您喜欢的来源。所有这些主题都将在那里讨论。
在http://www.ruby-doc.org/core-2.0.0/Symbol.html的开头引入了Symbol文字语法。 Hash键语法包含在http://www.ruby-doc.org/core-2.0.0/Hash.html的开头。
命名参数概念有点棘手。参考如下。
另外,冒号也用在if-then-else运算符中,代表else
运算符(例如condition ? this : that
)
答案 4 :(得分:1)
:something
在Ruby中被称为符号。它是一种字符串(虽然它不是String
类的一个实例),它从不被垃圾收集,并且每个字符串只有一个。
您总是将符号写为:something
或:"something"
(即使用前导冒号),但在一个可选情况下除外:在使用Ruby 1.9中引入的新哈希语法时将其用作键。< / p>
因此这两个哈希值100%相同:
{:a => "b"}
{a: "b"}
区别仅在于语法上,哈希是相同的。这种情况是唯一一个将冒号放在符号后面的情况(在这种情况下它也可以作为哈希火箭)
答案 5 :(得分:0)
让我们从开始:这就是所谓的symbol。符号本质上是字符串,但每个符号只有一个实例,这在上面的链接中用以下示例说明。
module One
class Fred
end
$f1 = :Fred
end
module Two
Fred = 1
$f2 = :Fred
end
def Fred()
end
$f3 = :Fred
$f1.object_id #=> 2514190
$f2.object_id #=> 2514190
$f3.object_id #=> 2514190
现在针对某事的后缀案例:。这引爆了某些东西是哈希中的关键。以下是包含值为a
"test"
的键hash = {a: "test"}
的哈希值,它也可以使用保持语法编写,如{:a => "test"}