私はRubyにまったく慣れていません。次のようなメソッドを宣言するにはどうすればよいですか。
a.method("hello" => "bye")
このメソッドのキーと値にアクセスするにはどうすればよいですか? この種の質問に答える良いリソースはありますか? Ruby の構文は私には少し奇妙です。
私はRubyにまったく慣れていません。次のようなメソッドを宣言するにはどうすればよいですか。
a.method("hello" => "bye")
このメソッドのキーと値にアクセスするにはどうすればよいですか? この種の質問に答える良いリソースはありますか? Ruby の構文は私には少し奇妙です。
このメソッドのキーと値にアクセスするにはどうすればよいですか? この種の質問に答える良いリソースはありますか? Ruby の構文は私には少し奇妙です。
そうです、Ruby の構文は、認識しないと奇妙ですが、習得すると楽しくて強力です。Ruby のハッシュと配列の構文は非常に簡潔で、混乱を招く可能性があります。
たとえば、配列は通常、次の構文で生成されます。
x = [1, 2, 3]
ただし、次のように短縮できます。
x = 1, 2, 3
あなたの場合、一般的にそのメソッドは次のように呼び出すことができます:
a.method( { "hello" => "bye" } )
質問のコードで定義したとおりに呼び出すこともできます。事実は、その場合あいまいさString
がないということ=>
です.Hash
これは、それを再現するには、ハッシュを受け入れて値を処理するメソッドを作成するだけでよいことを意味します。
def method( hash )
# hash.keys.first is how you can access the key ( "hello" )
# hash.first is how you can access the value ( "bye" )
end
ここで、上記の方法を使用すると、次の例のように、無視するか処理することを選択した複数の値 (複数) または非ハッシュ パラメーターを渡す可能性があることを覚えておく必要があります。
def method( hash )
raise ArgumentError "..." unless hash.is_a? Enumerable
raise ArgumentError "..." if hash.size > 1
# ...
end
最初の行で、ハッシュを列挙できない場合 ( Hash
es のように) 例外を発生させます。2 つ目では、ハッシュ内のキー値の数を確認し、複数の場合は例外を発生させます。
最後に注意すべきことは、そのメソッドに対して複数の引数を取り出すことはできず、その構文で動作することを期待することはできないということです:
def method( hash, a ); end
method( "hello" => "bye", 1 )
# => SyntaxError: syntax error, unexpected ')'
ただし、次を使用して解決できます。
method( { "hello" => "bye" }, 1 )
楽しむ。
私はあなたが何であるかを理解していないと思います"hello" => "bye"
。これはハッシュです (他の言語の辞書のようなものです)。次のように ruby でハッシュを宣言します{"key" => "value"}
。これが最もよく使われる方法です。Hash.new("key" => "value")
も有効です。ここで、メソッドはパラメーターとしてハッシュを受け取ります。クラスで次のように宣言できます。
class YourClass
# you don't need to specify type of parameter because variables in ruby are dynamic
def method(your_param)
# the code bellow will iterate your hash and show each key and value in this hash
your_param.each do |value, key|
puts key + " : " + value
end
# you can also access to a value in the hash if you know the key
puts your_param['hello']
end
end
次に、 のようa = YourClass.new
にクラスをインスタンス化し、メソッドにハッシュを渡しますa.method({"hello" => "bye"})
。ここでは、ご覧のとおり、 の間にハッシュが宣言されますが{}
、Ruby は、メソッドの最後のパラメーターがハッシュの場合は省略できるように、このオプションの規則をレンダリングします{}
。
ruby のメソッドについて: class がYourClass
ある場合、インスタンス メソッドを宣言するdef method ... end
(つまり、このメソッドはこのクラスのインスタンスでのみ呼び出す必要がある) か、名前を付けて直接呼び出すクラス メソッドを宣言できます。クラスのようにYourClass.method
(これは、クラスをインスタンス化せずにこのメソッドを呼び出すことができることを意味します。これは、C#などの他の言語の共有メソッドに似ています)。
次のように、メソッドがハッシュを受け取ったことを確認し、キーと値を確認できます。
def mthd(h)
p h
p h.keys
p.h.values
end
mthd("hello" => "bye") # => {"hello"=>"bye"}\n["hello"]\n["bye"]
より重要な問題は、その方法がアーキテクチャで何を達成することになっているのかということです。