我将一个方法作为参数传递给被调用的函数:
def my_function(args1)
puts args1
end
def my_calling_method
self.my_function(def do_this
return 2*3
end)
end
当我致电my_calling_method
拨打my_function
时,我的args1
为{0}而不是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_function,因为我没有通过my_calling_method传递任何参数。
答案 0 :(得分: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和Lambdas,以便在参数中传递方法。
答案 1 :(得分:0)
没错。方法定义返回nil
。 def do_this; return 2*3 end
的值为nil
。这就是你得到的。