質問

次のコードを実行した場合、最初の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演算子

唯一の不可解な質問は、*22に評価されます。メソッド呼び出しの外側に使用すると、SPLATオペレータはすべての配列を集中させるため、

a = *2
.

a[2]であることに起因します。メソッド呼び出しでは、SPLAT演算子は反対側の方法を実行しています。一連のメソッド引数としては、何でもパックします。3つのメンバーアレイを渡すと、3つのメソッド引数としてもたらされます。それをスカラー値に渡すと、単一のパラメータとして転送されます。だから、

2.to_s *2
.

は本質的にと同じです

2.to_s(2)
.

他のヒント

3行目には、2の「SPLAT」を指定してto_sメソッドを呼び出します(メソッド呼び出しで)、別のベースの数

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top