Rubyにはファーストクラスの関数はありません。それはprocsとlambdaを持っていますが、これらにはかなりのオーバーヘッドが必要です。 (Pythonは明らかにオーバーヘッドなしに、ファーストクラスの機能を持っています。) それは匿名クラスを使用して、もう少し作業をシミュレートすることができる第一級関数に私を発生し、次のように:ファーストクラスの関数としてのRubyの匿名クラス
がf = Class.new { def self.f; puts 'hi'; end }
def g(fun); fun; end
g(f.f)
# => "hi"
は誰もが知っているより良いです方法?
「より良い」とはどういう意味ですか?あなたは何を達成しようとしていますか?より速いスピードか、あるいはいくつかの追加機能? –
上記のコードで 'g(f.f)'を呼び出すと、 'g'に渡す引数は関数ではありません。メソッド 'f.f'を呼び出して、結果を返す文字列' 'hi ''を 'g'に渡します。これは単に引数を返します。 –
@Jordan実際に 'puts'は' nil'を返します。したがって、 'g(f.f)'は引数として 'nil'をとります。 – Aetherus