在 Ruby 中,如何在不调用函数对象的情况下显示或打印出它?

In Ruby, how to show or print out a function object, without invoking it?

说,如果我在 irb 里面

def foo
  return 123
end
foo

它会给出 123。那是因为 Ruby 不需要 () 来调用函数。但是我如何实际打印出函数对象呢? (有点像在 JavaScript 控制台中,当我说 function foo() {} 并键入 foo 时,它会显示 foo 作为一个函数(对象)。)

你可以使用 defined?

def foo
  return 123
end
foo
#=> 123

defined?(foo)
#=> "method"

局部变量会 return:

bar = 123
#=> 123

defined?(bar)
#=> "local-variable"

或者:

def foo
  return 123
end
foo
#=> 123

method(:foo)
#=> Object#foo()
method(:foo).call
#=> 123

Ruby 一般不使用函数/方法对象。哦,它们在那里:Method Class,但通常你不会在 Ruby.

中传递方法对象

你通常做的是以下事情之一:

  1. 传递符号以在对象上执行。因此,改为传递 :foo(调用者将使用 __send__ 来执行该方法。
  2. 在 Javascript 中使用匿名函数的地方使用块语法
  3. 要查看方法的源代码,请使用 pry show-method Class#method
  4. 按照之前的建议使用 defined? 来测试方法是否存在