Julia函数能否匹配特定符号?

Julia函数能否匹配特定符号?,julia,Julia,Julia函数能否匹配特定符号而不仅仅是类型符号?例如: function test(x::Symbol(:ALPHA)) end function test(x::Symbol(:BETA)) end 以上是我试图完成的,尽管语法是错误的。您真的希望为每个符号编译一个附加版本的函数吗?额外的编译是相当昂贵的,而且编译器无论如何都必须放入一个分支。。。通过对值进行调度不会获得任何性能 相反,您可能应该编写如下代码: function test(x::Symbol) if x == :A

Julia函数能否匹配特定符号而不仅仅是类型符号?例如:

function test(x::Symbol(:ALPHA)) end
function test(x::Symbol(:BETA)) end

以上是我试图完成的,尽管语法是错误的。

您真的希望为每个符号编译一个附加版本的函数吗?额外的编译是相当昂贵的,而且编译器无论如何都必须放入一个分支。。。通过对值进行调度不会获得任何性能

相反,您可能应该编写如下代码:

function test(x::Symbol)
    if x == :ALPHA
         ...
    elseif x == :BETA
         ...
    else
         throw(ArgumentError("Expected :ALPHA or :BETA"))
    end
end

或者如果你不喜欢这个样子,考虑使用模式匹配:


如果确实需要分派,可以使用类型来包装该值,如
Val{:ALPHA}
。需要在调用方站点上创建此类型。在99%的情况下,这是个坏主意。记住,在调用函数时,这不会阻止分支,事实上会使其速度变慢,因为分派比分支更昂贵。

您真的希望为每个符号编译函数的附加版本吗?额外的编译是相当昂贵的,而且编译器无论如何都必须放入一个分支。。。通过对值进行调度不会获得任何性能

相反,您可能应该编写如下代码:

function test(x::Symbol)
    if x == :ALPHA
         ...
    elseif x == :BETA
         ...
    else
         throw(ArgumentError("Expected :ALPHA or :BETA"))
    end
end

或者如果你不喜欢这个样子,考虑使用模式匹配:


如果确实需要分派,可以使用类型来包装该值,如
Val{:ALPHA}
。需要在调用方站点上创建此类型。在99%的情况下,这是个坏主意。记住,在调用函数时,这不会阻止分支,事实上会使其速度变慢,因为分派比分支更昂贵。

也许
Val
是您需要的。或者,如果
,只需
:)您是否需要模式匹配?不,它不是在Julia中实现的,但是你可以看看这个:看这个(尽管我同意,在你的情况下你可能需要它)。也许
Val
是你需要的。或者只是一个
如果
:)你是关于模式匹配的吗?不,它并没有在Julia中实现,但是你可以看看这个:看看这个(尽管我同意,你可能需要它在你的案例中)。