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_method给 时my_function,我得到args1的是 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_function,因为我没有通过 my_calling_method 传递任何参数。

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 和 Lambdas 以将方法作为参数传递。

于 2013-08-08T18:41:32.833 回答
0

没有什么不对。方法定义返回nil。的def do_this; return 2*3 end值为nil。这就是你得到的。

于 2013-08-08T18:30:14.993 回答