Ruby To_Sバイナリへの変換(引数内のSPLAT演算子)
-
12-12-2019 - |
質問
次のコードを実行した場合、最初の2行は私が期待するものを返します。しかしながら、3番目は2の2進表現を返します。
2.to_s # => "2"
2.to_s * 2 # => "22"
2.to_s *2 # => "10"
.
to_s
を呼び出すと2つの出力をバイナリに変換すると2を渡すことを知っていますが、3番目のケースでto_s
を無視しているのはなぜですか。それが違いを生むならば、Ruby 1.9.2を実行しています。
解決
right、Namidaが既に言及されているように、Ruby解釈
2.to_s *2
.
2.to_s(*2)
.
メソッド呼び出しの括弧はRubyではオプションです。ここでのアスタリスクは、いわゆる splat演算子。
唯一の不可解な質問は、*2
が2
に評価されます。メソッド呼び出しの外側に使用すると、SPLATオペレータはすべての配列を集中させるため、
a = *2
.
はa
が[2]
であることに起因します。メソッド呼び出しでは、SPLAT演算子は反対側の方法を実行しています。一連のメソッド引数としては、何でもパックします。3つのメンバーアレイを渡すと、3つのメソッド引数としてもたらされます。それをスカラー値に渡すと、単一のパラメータとして転送されます。だから、
2.to_s *2
.
は本質的にと同じです
2.to_s(2)
. 他のヒント
3行目には、2の「SPLAT」を指定してto_s
メソッドを呼び出します(メソッド呼び出しで)、別のベースの数
所属していません StackOverflow