如何确定Julia对象是否可调用

时间:2017-01-15 07:05:08

标签: julia callable-object

在Julia中,确定对象是否可调用的最佳方法是什么? (例如,是否有python callable函数的模拟?)

编辑:这是人们所希望的:

f() = println("Hi")
x = [1,2,3]
a = 'A'

callable(f)    # => true
callable(x)    # => false
callable(a)    # => false
callable(sin)  # => true

2 个答案:

答案 0 :(得分:2)

iscallable(f) = !isempty(methods(f))

这是Base中使用的方法(参见here)。

但考虑重新思考你的问题。像这样的自定义调度可能会很慢。

答案 1 :(得分:1)

这个怎么样:

julia> function iscallable(f)
       try
           f()
           return true

       catch MethodError
           return false
       end
end
iscallable (generic function with 1 method)


julia> f() = 3
f (generic function with 1 method)

julia> iscallable(f)
true

julia> x = [1,2]
2-element Array{Int64,1}:
 1
 2

julia> iscallable(x)
false

这实际上是一个Pythonic的事情(我怀疑效率不高)。 用例是什么?