我如何在 Julia 中使用类似variant(C++ 中的)的东西?
在 C++ 中,我可以做这样的事情
variant<int, float> value;
Run Code Online (Sandbox Code Playgroud)
我如何在 Julia 中为函数的参数做同样的事情?
function func(??)
# something
end
Run Code Online (Sandbox Code Playgroud)
抱歉,如果它没有传达我想做的事情。
您可以使用联合类型来执行相同的操作。
function func(x::Union{Int, AbstractFloat})
x + 1
end
Run Code Online (Sandbox Code Playgroud)
请注意,C++std::variant是一个标记的 union,因此您始终可以询问它是“哪个”变体,而 Julia union 是一个适当的集合并集。实际上,这意味着在 中std::variant<int, int>,您可以区分“左 int”和“右 int”,但 aUnion{Int, Int}实际上只是一个Int。没有办法知道它来自哪“一边”。要模拟精确的标记联合行为,您需要创建一些自定义结构来表示每种情况。
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
Run Code Online (Sandbox Code Playgroud)
但是,在 Julia 中,您通常不需要这个,如果您需要,那么使用通用函数来进行调度通常会更明智。