0

:attribute=>パラメータの形式を理解するのに苦労しています

誰かが私にそれについていくつかの説明をすることができますか?:attributeは、クラスまたは他の何かに属するフィールド(変数)ですか?このペアを1つのパラメーターとしてメソッドに渡すことができるのはなぜですか?

4

2 に答える 2

2

次のようなものを指している場合:

some_method(:foo => "bar", :baz => "abc")

それなら、Ruby がそれらのものをハッシュに変換するのは単なる省略形です。この形式を使用する場合、これが機能するためにはハッシュがメソッドの最後の引数である必要があることに注意してください。

以上の説明を踏まえると、

some_method(:foo => "bar", :baz => "abc")

大丈夫ですが、これは

some_method(:foo => "bar", :baz => "abc", moo)

ではありません。

于 2013-03-09T05:55:51.370 に答える
0

これはRailsでよく見られますが、Rails固有の質問ではありません。ルビーです。

あなたの質問に対する答えは、それがハッシュ内のキーと値のペアであり、通常はメソッドへの引数として渡されるということです。

これは、変数に直接割り当てられている場合にも表示されます。ただし、サンプルメソッドとサンプル使用法を示して、それらをまとめることができるようにします。

def some_method(*args, name: 'Joe', amount: 42, **other_params )
  puts "#{name}, #{amount}, glob of arguments = #{args.inspect}",
       "other params #{other_params}"
end

some_method(:occupation => 'programmer', :phone => '123-456-7890', name: 'Jane')

これは、実際には名前のないパラメーターを提供する最後の引数を提供できるという点で、Ruby2.0.0固有です。引数リストのハッシュに1.9+構文を使用すると、ハッシュ引数の後に表示される可能性のある他の名前のない「パラメーター」を指定できます。

Hashの古い構文、つまり:key =>'value'構文を使用した場合、引数リストの最後に** other_params引数を含めることは(少なくともこの記事の執筆時点では)許可されないことに注意してください。 。

some_methodを呼び出すときにハッシュ構文のままにしましたが、呼び出し元のコードで新しい構文を使用してハッシュを提供することもできます。

メソッド定義の引数リストに示されているのと同じように、ハッシュは呼び出し元の引数リストで最後に提供される必要があります。

于 2013-03-09T07:22:42.130 に答える