2013-10-03 59 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?