我有两个具有相同名称和相同数量的“正常”参数的方法。但是,它们在关键字参数的数量上有所不同(它们都是非可选的)。
我认为以下最小示例很好地说明了我的观点:
julia> f(a; b) = a+b
f (generic function with 1 method)
julia> f(a; b, c)= a+b+c
f (generic function with 1 method)
julia> f(1; b=1)
ERROR: UndefKeywordError: keyword argument c not assigned
Stacktrace:
[1] top-level scope
@ REPL[72]:1
julia> f(1; b=1, c=2)
4
输出的第二行(“f(带有 1 个方法的通用函数)”)已经表明 Julia 不明白我想要什么 - 它应该是2 个方法(例如,如果我写的话f(a, b; c) = a+b+c
)。
我已经在 Julia discourse forum 中找到了这个,这似乎解释了为什么这对多次调度不起作用。但是,在我的情况下,不是类型而是计数不同,所以我希望有一个(整洁的)解决方案。
关于我为什么想要这个:我有一个函数可以为不同的分子进行一些计算(准确地说是计算斯塔克曲线)。该函数需要针对不同的分子类型(准确地说是不同的对称性)采取不同的行动,并且还需要不同的参数(不同的量子数)。
所以这就是我需要多次调度的原因——但是为什么要使用关键字参数,你可能会问。那是因为我使用分布创建量子数并将它们NamedTuple
与...
.
我不想改变这种行为,但也许你很好奇我为什么需要这样的东西。