7

在 Julia 中,确定对象是否可调用的最佳方法是什么?(例如,有没有类似 python 的callable功能?)

编辑:这是人们希望的:

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

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

2 回答 2

3

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

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

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

于 2017-01-15T16:44:07.937 回答
2

这个怎么样:

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 的事情(我怀疑效率不高)。用例是什么?

于 2017-01-15T12:29:11.827 回答