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}
中提取键和值呢?