0

私はRubyにまったく慣れていません。次のようなメソッドを宣言するにはどうすればよいですか。

a.method("hello" => "bye")

このメソッドのキーと値にアクセスするにはどうすればよいですか? この種の質問に答える良いリソースはありますか? Ruby の構文は私には少し奇妙です。

4

5 に答える 5

1

このメソッドのキーと値にアクセスするにはどうすればよいですか? この種の質問に答える良いリソースはありますか? 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

最初の行で、ハッシュを列挙できない場合 ( Hashes のように) 例外を発生させます。2 つ目では、ハッシュ内のキー値の数を確認し、複数の場合は例外を発生させます。

最後に注意すべきことは、そのメソッドに対して複数の引数を取り出すことはできず、その構文で動作することを期待することはできないということです:

def method( hash, a ); end
method( "hello" => "bye", 1 )
# => SyntaxError: syntax error, unexpected ')'

ただし、次を使用して解決できます。

method( { "hello" => "bye" }, 1 )

楽しむ。

于 2013-08-05T01:27:01.477 に答える
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#などの他の言語の共有メソッドに似ています)。

于 2013-08-05T01:19:10.597 に答える
0

次のように、メソッドがハッシュを受け取ったことを確認し、キーと値を確認できます。

def mthd(h)
  p h
  p h.keys
  p.h.values
end

mthd("hello" => "bye")  # => {"hello"=>"bye"}\n["hello"]\n["bye"]

より重要な問題は、その方法がアーキテクチャで何を達成することになっているのかということです。

于 2013-08-05T01:10:04.573 に答える