如何在Ruby中传递方法作为参数?

时间:2013-08-08 18:24:49

标签: ruby methods arguments argument-passing

我将一个方法作为参数传递给被调用的函数:

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传递任何参数。

2 个答案:

答案 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)

没错。方法定义返回nildef do_this; return 2*3 end的值为nil。这就是你得到的。

相关问题