5

Rubyで関数を名前で渡すにはどうすればよいですか?(私はRubyを数時間しか使用していないので、まだ物事を理解しています。)

nums = [1, 2, 3, 4]

# This works, but is more verbose than I'd like    
nums.each do |i|
  puts i
end

# In JS, I could just do something like:
# nums.forEach(console.log)

# In F#, it would be something like:
# List.iter nums (printf "%A")

# In Ruby, I wish I could do something like:
nums.each puts

Rubyでも同様に簡潔に行うことができますか?ブロックを使用する代わりに、名前で関数を参照することはできますか?

締めくくりに投票する人々:これが本当の質問ではない理由を説明できますか?

4

3 に答える 3

6

次のことができます。

nums = [1, 2, 3, 4]
nums.each(&method(:puts))

この記事では、Rubyのproc、ブロック、ラムダの違いについて詳しく説明しています。

于 2012-12-10T21:33:43.517 に答える
3

関数をブロックでラップするのではなく、名前で参照することはできますか?

あなたはそれを「ラップ」していません-ブロック関数です。

簡潔さが懸念される場合は、次の代わりに角かっこを使用できますdo..end

nums.each {|i| puts i}
于 2012-12-10T21:34:46.073 に答える
0

すぐに使用できるわけではありませんが、次のものを使用できますmethod

def invoke(enum, meth)
  enum.each { |e| method(meth).call(e) }
end

私はそれがmonkeypatchedに包まれることを好みEnumerableます。

これについては他にも方法があります。これは一種のブルートフォースです。

于 2012-12-10T21:37:05.550 に答える