2

呼び出された関数にメソッドを引数として渡しています。

def my_function(args1)
   puts args1
end

def my_calling_method
   self.my_function(def do_this 
             return 2*3
           end)
end

を呼び出すmy_calling_methodmy_functionargs1ではなく nil になりdef do_this return 2*3 endます。

私は何か間違ったことをしていますか?Rubyでメソッドを引数として渡すことはできますか?

さて、私は今私の要件のために Proc を実装しようとしましたが、呼び出し元のメソッドに渡すのに苦労しています。

my_Proc = Proc.new do
    return 2*3
end

def my_calling_method
    self.my_function
end

def my_function my_Proc
   my_Proc.call
end

私が使用した参考資料は、私のようにProcを引数としてメソッドに渡しますが、my_calling_methodを介して引数を渡していないため、エラーが発生し、my_functionに引数が渡されません。

4

2 に答える 2

5

新しいメソッドを定義しても値は返されません。(電話番号を書き留めても会話にならないのと同じように。)

irb:001>def something
irb:002>   # code here
irb:003>end
=> nil

それを IRB で実行すると、 が得られますnilね。したがって、そのメソッドをメソッド呼び出しの一部として定義すると、次のようになります。

some_method( def something; stuff; end )

nilメソッド定義から戻っているためnil、 に渡されsome_methodます。

あなたが達成しようとしていることを正確に知らなくても、メソッド、または「ブロック」と呼ばれるものをメソッド呼び出しに渡すことができることをお伝えします。

def my_function(&block)
  puts block.call
end

my_function {2*3}
#=> 6
my_function {t = Time.now; t + 8640}
#=> 2013-08-09 14:03:29 -0500
my_function do 
   name = "Charlie"
   name.downcase.reverse.capitalize
end
#=> Eilrahc

実際、これはメソッドで(多かれ少なかれ)行っていることです.each

array.each {|ele| foo}

メソッドを引数として渡す方法については、Ruby のブロック、Procs、および Lambda を読むことをお勧めします。

于 2013-08-08T18:41:32.833 に答える
0

何も間違ってない。メソッド定義は を返しますnil。の値はdef do_this; return 2*3 endですnil。それがあなたが得るものです。

于 2013-08-08T18:30:14.993 に答える