可能有点绕,我想表达,比如我定义了 func1(x)
,Julia
中有没有一个函数(假设为 successfullyCall()
),只要我的函数 func1
调用成功了,那么 successfullyCall( func1(x) )
就返 true
呢?
没有找到相应的函数,不过想到了一种方法:func1(x) |> x->true
可以使用 methods
函数,它返回给定参数下函数匹配方法组成的列表,再判断所返回的列表是否为空即可判断是否可调用,但是这样并不会实际调用函数,只是查了该函数的方法表。如果完全实现你所提到的 successfullyCall
感觉必须要用到宏了。
😄 f(x) = identity(x);
😄 x = 1;
😄 methods(f, typeof.([x]))
# 1 method for generic function "f":
[1] f(x) in Main at REPL[13]:1
😄 typeof(ans)
Base.MethodList
好的,我尝试下,谢谢~~
我的理解是,函数是否调用成功不应该看是否报错+函数的返回值么?
针对某个函数判断是否成功调用还好办。像写个通用的感觉几乎不可能,话说这真的不是停机问题么。
1 个赞
我发现 applicable
和 hasmethod
函数可能更符合你的需求
很感谢,其实我只是在 @test
几个很简单的函数。
不过话说小白真的很需要一个 julia
的 IDE 啊
3Q~~~~~~
查看函数调用的trace
foo(x) = x
using Cassette
Cassette.@context Ctx
Cassette.prehook(::Ctx, f, args...) = f isa typeof(foo) && println("successfully called $(typeof(foo))")
function main()
# blablabla
# 随便什么代码
# 某个地方调用了foo
end
Cassette.overdub(Ctx(), ()->main())
1 个赞