Julia 中有没有一个用于测试函数调用成功的函数


#1

可能有点绕,我想表达,比如我定义了 func1(x)Julia 中有没有一个函数(假设为 successfullyCall()),只要我的函数 func1 调用成功了,那么 successfullyCall( func1(x) ) 就返 true 呢?


#2

没有找到相应的函数,不过想到了一种方法:func1(x) |> x->true


#3

可以使用 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

#4

好的,我尝试下,谢谢~~


#5

我的理解是,函数是否调用成功不应该看是否报错+函数的返回值么?

针对某个函数判断是否成功调用还好办。像写个通用的感觉几乎不可能,话说这真的不是停机问题么。


#6

我发现 applicablehasmethod 函数可能更符合你的需求


#7

很感谢,其实我只是在 @test 几个很简单的函数。
不过话说小白真的很需要一个 julia 的 IDE 啊


#8

3Q~~~~~~


#9

查看函数调用的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())