在python中,我可以使用“callable”来检查是否可以调用变量。像这样:
# -*- coding: utf-8 -*-
def test():
print "hello world"
a = test
if callable(a):
a()
所以这样,我可以告诉a是一个函数,而不是一个实例变量。 但是在ruby中,大括号可以省略,所以对我来说,当我调用它时,我无法判断它是函数还是实例变量。是否有一些方法可以在运行时检查变量是函数还是实例变量?
答案 0 :(得分:6)
是。 defined?
为您提供所谓的内容。
a = 1
def a; end
b = 1
def c; end
defined? a # => "local-variable"
defined? a() # => "method"
defined? b # => "local-variable"
defined? c # => "method"
答案 1 :(得分:2)
开箱即用的ruby中不允许使用此语法。这是因为在函数调用中可能省略括号,并且ruby解析器没有机会理解您要调用“ callable ”而不是仅仅解决它。最简单的解决方法可能是:
▶ λ = ->(param) { puts param }
#⇒ #<Proc:0x00000004e93050@(pry):7 (lambda)>
▶ λ.call(5) if λ.respond_to? :call
#⇒ 5
有一个特定的角落案例ruby blocks。响应to_proc
方法的所有内容都可以作为代码块传递给任何接受代码块的方法,并且将隐式调用该块。
E.g:
▶ [1,2,3].each &λ
#⇒ 1
#⇒ 2
#⇒ 3
答案 2 :(得分:0)
在 ruby 中,一个变量是可调用的,如果它响应 #call
。
def callable(obj)
obj.respond_to? :call
end