在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
这不仅完全没问题,而且因为nothing
是Void
类型的单例,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
也许我误解了你的问题。