在 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.
中传递方法对象
你通常做的是以下事情之一:
- 传递符号以在对象上执行。因此,改为传递
:foo
(调用者将使用 __send__
来执行该方法。
- 在 Javascript 中使用匿名函数的地方使用块语法
- 要查看方法的源代码,请使用
pry show-method Class#method
- 按照之前的建议使用
defined?
来测试方法是否存在
说,如果我在 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.
中传递方法对象你通常做的是以下事情之一:
- 传递符号以在对象上执行。因此,改为传递
:foo
(调用者将使用__send__
来执行该方法。 - 在 Javascript 中使用匿名函数的地方使用块语法
- 要查看方法的源代码,请使用
pry show-method Class#method
- 按照之前的建议使用
defined?
来测试方法是否存在