Ruby 我可以在散列中省略散列的大括号吗?

Ruby 我可以在散列中省略散列的大括号吗?,ruby,hash,Ruby,Hash,我在一个哈希中有一个哈希: validates :password, length: { within: 5..30 }, presence: true 是否可以在哈希中省略哈希的大括号?这: validates :password, length: within: 5..30, presence: true 引发语法错误。不幸的是,没有(至少据我所知),因为length需要多个参数,并且需要散列作为参数。我发现自己正在

我在一个哈希中有一个哈希:

validates :password,
        length: { within: 5..30 },
        presence: true
是否可以在哈希中省略哈希的大括号?这:

validates :password,
          length: within: 5..30,
          presence: true
引发语法错误。

不幸的是,没有(至少据我所知),因为length需要多个参数,并且需要散列作为参数。我发现自己正在做的一件事是在config/constants.rb文件中初始化这些约束,因为这些变量不会经常更改,而且我经常发现自己为长度提供了多个参数

config/constants.rb

MODEL_LENGTH_CONSTRAINT = {
    within: 5..30,
    too_short: "must have at least %{count} words",
    too_long: "must have at most %{count} words"
}
app/models/model.rb

validates :password,
    length: MODEL_LENGTH_CONSTRAINT,
    presence: true
我知道这并不能真正解决您的问题,但在我看来,这是一种更简洁的方法。愉快的编码。

不幸的是,这不是(至少据我所知),因为长度需要多个参数,并且需要一个散列作为参数。我发现自己正在做的一件事是在config/constants.rb文件中初始化这些约束,因为这些变量不会经常更改,而且我经常发现自己为长度提供了多个参数

config/constants.rb

MODEL_LENGTH_CONSTRAINT = {
    within: 5..30,
    too_short: "must have at least %{count} words",
    too_long: "must have at most %{count} words"
}
app/models/model.rb

validates :password,
    length: MODEL_LENGTH_CONSTRAINT,
    presence: true

我知道这并不能真正解决您的问题,但在我看来,这是一种更干净的方法。愉快的编码。

更准确地说,您在哈希文本中有一个哈希文本,它恰好是方法调用中的最后一个参数。只有当散列是方法调用中的最后一个参数时,才可以省略大括号,其他地方都需要大括号。您的内部哈希是另一个哈希文本中的值,而该值不是方法调用中的最后一个参数,因此,不,您不能这样做。

更准确地说,您在哈希文本中有一个哈希文本,它恰好是方法调用中的最后一个参数。只有当散列是方法调用中的最后一个参数时,才可以省略大括号,其他地方都需要大括号。你的内部散列是另一个散列文字中的一个值,这不是方法调用中的最后一个参数,所以,不,你不能这样做。

这些是大括号,不是大括号或小括号。假设你有
h={a:b,{c:d,e:f},{e:g}
,并且想要提取值
f
g
,即
h[{c:d,e:f}]
h[{e:g}][e]。如果可以省略括号,这将成为
h={a:b,c:d,e:f,e:g}
,但是由于哈希不能有重复的键,
e:f
e:g
。即使最后一个哈希是
{h:g}
,Ruby怎么可能知道如何从
{a:b,c:d,e:f,h:g>中提取键和值呢
?这些是大括号,不是括号或括号。假设您有
h={a:b,{c:d,e:f},{e:g}
,并且想要提取值
f
g
,即
h[{c:d,e:f}][e]
h[{e:g}][e]/code>。如果可以省略括号,这将变成
h={a:d,c:e,f}
,但是由于散列不能有重复的键,
e:f
e:g
必须去。即使最后一个散列是
{h:g}
,Ruby怎么可能知道如何从
{a:b,c:d,e:f,h:g}
中提取键和值呢?