gpt4 book ai didi

enums - 用于与 Enum 进行开关或模式匹配的宏

转载 作者:行者123 更新时间:2023-12-04 06:55:41 27 4
gpt4 key购买 nike

我想要一些语法糖来打开 Enum .当然,一个if else块按预期工作:

@enum Fruit apple=1 orange=2 kiwi=3

function talk1(fruit::Fruit)
if fruit == apple
"I like apples."
elseif fruit == orange
"I like oranges."
else
"I like kiwis."
end
end

我什至可以执行以下操作:
function talk2(fruit::Fruit)
say = ["I like apples.", "I like oranges.", "I like kiwis."]
say[Int(fruit)]
end

但我真的不喜欢 talk2 中的方法,因为它分配了一个向量并且可读性较差。我试过 Match.jl包,但我似乎无法匹配 Enum :
using Match

function talk3(fruit::Fruit)
@match fruit begin
apple => "I like apples."
orange => "I like oranges."
kiwi => "I like kiwis."
end
end
julia> talk3(apple)
"I like apples."

julia> talk3(orange)
"I like apples."

julia> talk3(kiwi)
"I like apples."

当然,在 @match宏我可以转换 Enum作为 Int并匹配 Int ,但这会妨碍开关的可读性。

有没有办法获取 火柴.jl Enum 上工作?或者是否有来自不同包的宏可以打开 Enum ?

最佳答案

这可能是使用类型而不是枚举的主要原因。然后 dispatch 为你处理这个:

abstract type Fruit end
struct Apple <: Fruit end
struct Orange <: Fruit end
struct Kiwi <: Fruit end

talk(fruit::Apple) = "I like apples."
talk(fruit::Orange) = "I like oranges."
talk(fruit::Fruit) = "I like kiwis."

https://pixorblog.wordpress.com/2018/02/23/julia-dispatch-enum-vs-type-comparison/指出,这段代码被编译器有效地内联。

关于enums - 用于与 Enum 进行开关或模式匹配的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com