这个Ruby函数如何返回值?

3

我正在处理旧版的 Ruby 代码,但是我无法理解这段代码的运作。这个函数是:

    def determine_caller(host)
      if host["name"] =~ /special/
        method(:call_special)
      else
        method(:call_normal)
      end
    end

后来这种方法被称为:
caller = determine_caller(host_name)

程序最终使用caller作为变量,在另一个类中运行一个方法。程序后面的call_specialcall_normal是方法。我认为这是定义一个方法以发送到另一个方法,以便在需要时调用该方法(无论是call_special还是call_normal),但我不明白determin_caller如何返回任何内容。我认为method关键字会调用方法本身,但至少根据我理解的程序来看,这不可能是正确的。

请注意,如果我们有 def a(msg) puts "#{msg}, Bob" enddef say() method(:a) endm = say #=> #<Method: Object#a>,那么 m.call("Hi") #=> Hi, Bob - Cary Swoveland
2个回答

2
不需要涉及 Ruby 对象模型等内容,简单回答就是方法中的最后一条语句总是会被返回。因此,如果调用者的名称是“special”,则返回使用这些参数调用“method”方法时所返回的任何值。请保留 HTML 标签。

返回最后看到的 - the Tin Man

1

Object#method 方法返回一个 Method。它不调用任何东西。(如果它这样做的话,method 将是一个令人难以置信的糟糕名称。)

顺便说一句:method 不是关键字,determine_caller 不是函数。它们都是方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接