如何在Julia中使用类似variant
(在C++中(的东西?
在C++中,我可以做一些类似的事情
variant<int, float> value;
对于函数的参数,我如何在Julia中做同样的事情?
function func(??)
# something
end
很抱歉,如果它没有传达我想做什么。
您可以使用联合类型来执行相同的操作。
function func(x::Union{Int, AbstractFloat})
x + 1
end
请注意,C++std::variant
是一个标记的并集,因此您可以始终询问";其";它是变体,而Julia并集是一个适当的集并集。务实地说,这意味着在std::variant<int, int>
中,你可以区分";left int";和一个";右int";,但CCD_ 4实际上只是CCD_。没有办法判断哪个";侧面";它来自。为了模拟精确标记的并集行为,您需要制作一些自定义结构来表示每种情况。
struct LeftInt
value :: Int
end
struct RightInt
value :: Int
end
function func(x::Union{LeftInt, RightInt})
# ... Check whether x is a LeftInt or not ...
end
但是,在Julia中,你通常不需要这个,如果你需要,那么通常更明智的做法是使用通用函数来进行调度。
在Julia中,您只需编写
function func(value)
# something
end
当你用另一个类型调用这个非类型化函数时,编译器会自动为你编译它的单独的类型特定方法。
在Julia中,与C++不同,您通常根本不提供参数类型,而是让编译器为您确定类型。您提供的任何参数类型都只是断言,或者有助于在您自己想为不同类型提供不同实现的情况下将其分派到正确的方法。