2013-10-03 262 views
0

我刚刚写了这个代码,该作品虽然我不完全知道为什么解释哈希火箭。在这种情况下

以前的代码是这样的,这是非常合情合理的:

scope = scope.where(id: query.ids) 

我不明白的第一件事就是为什么它这个不是我更换,我认为是首选的冒号哈希火箭工作语法:

scope = scope.where(Sequel.qualify(:meeting_graphs, :id): query.ids) 

Sequel.qualify返回一个对象,它也使我困惑,因为我认为它会返回一个符号。

任何人都可以解释吗?

回答

1
  • 的作品虽然我不完全知道为什么

    只要Sequel.qualify(:meeting_graphs, :id)是有效的,它可以是一个哈希键。任何对象都可以是散列键。这就是为什么。

  • 它为什么当我用冒号

    即使Sequel.qualify(:meeting_graphs, :id)原来是一个符号,冒号符号不会起作用,因为它是一个文字符号的一部分更换哈希火箭这个不行。它不是一个方法或关键字,它已经在已经创建的Ruby对象上工作。

3
  1. 只有当键是文字符号时,新的散列语法才有效。

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

+0

我会说“一个文字符号” –

+0

@SergioTulentsev谢谢。这是我错过的词。 –

+0

Sequel.qualify返回一个对象 – dagda1

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

看到这个帖子的详细信息:

Is there any difference between the `:key => "value"` and `key: "value"` hash notations?