我刚刚编写了这段代码,虽然我不完全确定原因,但仍有效:
scope = scope.where(Sequel.qualify(:meeting_graphs, :id) => query.ids)
我特别谈论哈希火箭。
以前的代码就是这个,这很有道理:
scope = scope.where(id: query.ids)
我不明白的第一件事就是当我用冒号取代哈希火箭时,这是不行的,我认为它是首选语法:
scope = scope.where(Sequel.qualify(:meeting_graphs, :id): query.ids)
Sequel.qualify返回一个对象,这个对象也让我感到困惑,因为我认为它会返回一个符号。
任何人都可以解释一下吗?
答案 0 :(得分:3)
只有当key是文字符号时,新的哈希语法才有效。
Sequel.qualify
返回限定符对象标识列。这是可能的,因为每个对象都可以是Ruby中的哈希键。
答案 1 :(得分:1)
虽然我不完全确定为什么
,但仍有效只要Sequel.qualify(:meeting_graphs, :id)
有效,它就可以成为哈希的关键。任何对象都可以是哈希的键。这就是原因。
为什么当我用冒号
替换哈希火箭时,这不起作用即使Sequel.qualify(:meeting_graphs, :id)
原来是一个符号,冒号也不会起作用,因为它是文字符号的一部分。它不是适用于已经制作的Ruby对象的方法或关键字。
答案 2 :(得分:0)
您将关键字传递给函数,关键字使用Hash语法。
有许多方法可以在ruby中定义哈希值,并且在使用函数的方式中,一种语法不起作用。
def return_one_symbol
'one'.to_sym
end
hash_syntax1 = {:one => '1'}
hash_syntax2 = {one: '1'}
p hash_syntax1 # => {:one=>"1"}
p hash_syntax2 # => {:one=>"1"}
hash_syntax1_function = {return_one_symbol => '1'}
hash_syntax2_function = {return_one_symbol: '1'}
p hash_syntax1_function # => {:one=>"1"}
p hash_syntax2_function # => {:return_one_symbol=>"1"}
请参阅此帖子了解更多信息:
Is there any difference between the `:key => "value"` and `key: "value"` hash notations?