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. 新しいハッシュ構文は、キーがリテラル シンボルの場合にのみ機能します。

  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 でハッシュを定義する方法はたくさんありますが、関数を使用する方法では、1 つの構文が機能しません。

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 に答える