2017-01-15 23 views
5

在Julia中,確定對象是否可調用的最佳方法是什麼? (例如,有蟒蛇的callable功能的模擬?)如何確定是否可以調用Julia對象

編輯:這是一個求之不得的東西:

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

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

你在找'method_exists'嗎? – Gnimuc

+0

@Gnimuc我剛剛嘗試過,但它沒有我正在尋找的功能。我編輯帖子以顯示我想要的內容(基本上類似於Python的'callable'),但是在Julia中可能還沒有這樣的功能(012)... – Yly

+1

在julia中有一個'Function'類型,'typeof x)<:Function'適用於你的例子。 – Gnimuc

回答

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 

這其實是一個相當Python的東西(我懷疑效率不高)。 什麼是用例?

+3

'f(x)= 3','iscallable(f)=> false'。 –

+0

好點,我的部分需要更多的測試... –

2

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

這是在基地中使用的方法(參見here)。

但請考慮重新考慮您的問題。像這樣的自定義調度可能會很慢。

+1

'x = [1]; (x :: Vector {T}){T}()= x; X(); iscallable(X)'。只是 'iscallable(f)=!isempty(方法(f))'工作嗎? –

+0

是的,我認爲是的。 –

相關問題