0

私が Scala や他の言語でできることと同様のことを Ruby で行うことは可能でしょうか?

someCollection.foreach(x => println(x)) // a full version
someCollection.foreach(println) // a short version

Rubyでは次のことができます:

some_array.each { |x| puts x }

では、どうすればこれを行うことができますか?

some_array.each { puts }

更新

特にプットについて話しているわけではありません。たとえば、それを選んだだけです。some_other_method パラメータを 1 つ取るものもあるかもしれません。

some_array.map { some_other_method }
some_array.map(some_other_method) # ???

def some_other_method a
   # ... doing something with a
end
4

2 に答える 2

3

SLS (§6.26.5) の暗黙的な η 展開のルールを調べると、静的な型情報に大きく依存しているため、Ruby では機能しない可能性があることがすぐにわかります。

ただし、リフレクションを介してオブジェクトを明示的に取得することはできます。オブジェクトは応答し、応答するオブジェクトと同様に、単項接頭辞演算子を使用して、ブロックであるかのように渡すことができます。MethodMethodto_procto_proc&

some_array.each(&method(:puts))
于 2013-07-25T11:01:14.273 に答える
1

残念ながら、そうではありません。各オブジェクトで呼び出されるメソッド名を送信できます。例:

some_array.each &:print_myself

これは次と同等です:

some_array.each {|x| x.print_myself}

しかし、あなたが求めていることを行うためのクリーンな(組み込みの)方法を知りません。(編集:@Jörgの答えはこれを行いますが、実際には入力を節約するわけではありません.Rubyには自動部分関数アプリケーションはありません)

于 2013-07-25T05:41:21.243 に答える