小编Sno*_*wop的帖子

澄清 julia 中的函数签名和调度行为

我在 Julia (1.2) REPL 中尝试了一些东西,但我一直在想一些我不了解调度的东西。


我首先尝试了这件事,它按我预期的方式工作:

f(a::T) where {T <: Int} = "Test"

  • 调用 f(3) 有效 Int <: Int == true

  • 调用 f("Hello") 会导致“MethodError: no method matching”错误,因为 String <: Int == false


然后,我尝试了这个方法,我不明白为什么在某些情况下调用它有效:

f(a::T, b::U) where {T, U <: T} = "Another Test"

  • 调用 f(3, 3) 有效(如我所料)

  • 但是 f(3, "Hello") 也可以工作并且不会抛出“MethodError: no method matching”???

我认为(因为 T 变成了一个 Int 而 U 变成了一个字符串)String <: Int == false???


我想我在这里遗漏了一些非常简单的东西,但我找不到它......所以这是我的问题,为什么 f(3, "Hello") 正在工作???


此外,我尝试了这段代码(我尝试重新创建第二个方法签名),但正如我所料,它正确地失败了:

Test = Tuple{T, U} where {T, U <: …

typing dispatch julia

8
推荐指数
1
解决办法
104
查看次数

标签 统计

dispatch ×1

julia ×1

typing ×1