Julia:可变结构项的多分派
我正在尝试拆分函数Julia:可变结构项的多分派,julia,Julia,我正在尝试拆分函数 function my_fun(A::MyStruct) if typeof(A.X) <: Nothing println("Case 1"); else println("Case 2"); end end 最有效的方法是什么?编译器只知道类型,不知道值,因此无法区分“案例1”和“案例2”。您可以使用动态分派,例如使用函数屏障,也可以决定通过使结构参数化来告诉编译器案例之间的差异 我建议将您的代码更改为: s
function my_fun(A::MyStruct)
if typeof(A.X) <: Nothing
println("Case 1");
else
println("Case 2");
end
end
最有效的方法是什么?编译器只知道类型,不知道值,因此无法区分“案例1”和“案例2”。您可以使用动态分派,例如使用函数屏障,也可以决定通过使结构参数化来告诉编译器案例之间的差异 我建议将您的代码更改为:
struct MyStruct{T}
t::Int64
X::T
end
(我将结构更改为不可变,因为对于像这样的简单结构,您几乎总是更喜欢不可变的)
那么
我认为你不能这样做,而且绝对需要一个类型联合,你可以使用一个函数屏障
_my_fun(::Type{Nothing}, A::MyStruct) = println("Case 1")
_my_fun(::Type{Float64}, A::MyStruct) = println("Case 2")
my_fun(A::MyStruct) = _my_fun(typeof(A.X), A)
通常,我更喜欢第一种解决方案。编译器只知道类型,而不知道值,因此无法区分“案例1”和“案例2”。您可以使用动态分派,例如使用函数屏障,也可以决定通过使结构参数化来告诉编译器案例之间的差异 我建议将您的代码更改为:
struct MyStruct{T}
t::Int64
X::T
end
(我将结构更改为不可变,因为对于像这样的简单结构,您几乎总是更喜欢不可变的)
那么
我认为你不能这样做,而且绝对需要一个类型联合,你可以使用一个函数屏障
_my_fun(::Type{Nothing}, A::MyStruct) = println("Case 1")
_my_fun(::Type{Float64}, A::MyStruct) = println("Case 2")
my_fun(A::MyStruct) = _my_fun(typeof(A.X), A)
通常,我更喜欢第一种解决方案。谢谢,这就是我要找的。谢谢,这就是我要找的。