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

Yly*_*Yly 6 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
Run Code Online (Sandbox Code Playgroud)

Isa*_*ton 5

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

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

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

  • `x = [1]; (x::向量{T}){T}() = x; X(); 可调用(x)`。只是 `iscallable(f) = !isempty(methods(f))` 有效吗? (2认同)

Dav*_*ers 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
Run Code Online (Sandbox Code Playgroud)

这实际上是一件相当 Pythonic 的事情(而且我怀疑效率不是很高)。有什么用例?

  • `f(x) = 3`,`iscallable(f) => false`。 (8认同)