检查 julia 中的函数调用中是否使用了可选参数的"best practices"方法是什么



在python中,我可能有这样的函数:

def sum_these(x, y=None):
if y is None:
y = 1
return x + y

朱莉娅的等效用途是什么?确切地说,我知道我可能会这样做:

function sum_these(x, y=0)
if y == 0
y = 1
end
x + y
end

但是,我宁愿不使用零,而是使用一些与python中None具有相同含义的值

编辑

为了清楚起见,这些示例函数的结果并不重要。如果 y 为 None 则发生的事件(any(很重要,对于我的情况,设置 y=[某个数字] 是不可取的。经过一些搜索,我认为,除非有人提供更好的解决方案,否则可以执行以下操作:

function sum_these(x, y=nothing)
if y == nothing
do stuff
end
return something 
function sum_these(x, y=nothing)
if y == nothing
do stuff
end
return something 
end 

这不仅完全没问题,而且因为nothingVoid类型的单例,y==nothing实际上会编译掉,所以 if 语句在这里实际上没有运行时成本。我在一篇博客文章中深入讨论了这个问题,但它的真正含义是函数自动专用化允许在类型稳定/可推断函数中始终免费检查任何内容。

但是,您可能需要考虑将其拆分为两个不同的函数:

function sum_these(x)
return something 
end 
function sum_these(x, y)
do stuff
return something 
end 

当然,这只是风格差异,正确的选择取决于return something中共享的代码量。

也许使用带有空回退的多个调度?

function f(x, y=nothing)
...
do_something(x, y)
...
return something
end
do_something(x, y) = nothing
function do_something(x, y::Void)
...
end

根据需要将其他相关 var 添加到do_something,并根据需要返回某些内容或突变。

你的问题有点令人困惑。似乎你想要的是

function sum_these(x, y=1)
return x + y
end

但这也不能完全满足您的要求,因为即使您在示例中调用sum_these(3, 0),它也会将 0 替换为 1。

同样在 Python 中,我会使用

def sum_these(x, y=1):
return x + y

也许我误解了你的问题。

相关内容

  • 没有找到相关文章

最新更新