0

我刚刚写了这段代码,虽然我不完全确定为什么:

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 返回一个对象,这也让我感到困惑,因为我认为它会返回一个符号。

谁能解释一下?

4

3 回答 3

3
  1. 仅当 key 是文字符号时,新的哈希语法才有效。

  2. Sequel.qualify返回限定符对象标识列。这是可能的,因为每个对象都可以是 Ruby 中的哈希键。

于 2013-10-03T08:54:27.330 回答
1
  • 虽然我不完全确定为什么

    只要Sequel.qualify(:meeting_graphs, :id)有效,它就可以是哈希的键。任何对象都可以是哈希的键。因此。

  • 为什么当我用冒号替换哈希火箭时它不起作用

    即使Sequel.qualify(:meeting_graphs, :id)结果是一个符号,冒号符号也不起作用,因为它是文字符号的一部分。它不是适用于已生成的 Ruby 对象的方法或关键字。

于 2013-10-03T09:00:13.050 回答
0

您正在将关键字传递给函数,并且关键字使用哈希语法。

在 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"}

有关更多信息,请参阅此帖子:

`:key => "value"` 和 `key: "value"` 哈希表示法之间有什么区别吗?

于 2013-10-03T08:59:38.677 回答