在python中我可能有这样的函数:
def sum_these(x, y=None):
if y is None:
y = 1
return x + y
julia的等效用途是什么?确切地说,我知道我可能会这样做:
function sum_these(x, y=0)
if y == 0
y = 1
end
x + y
end
但是我宁愿不使用零,而是使用一些与python中None
具有相同含义的值
修改
为了清楚起见,这些示例函数的结果并不重要。如果y为None则发生的事件(任何)很重要,对于我的情况设置y = [某个数字]是不可取的。经过一番搜索,我认为,除非有人提供更好的解决方案,否则就要做一些事情:
function sum_these(x, y=nothing)
if y == nothing
do stuff
end
return something
答案 0 :(得分:3)
function sum_these(x, y=nothing)
if y == nothing
do stuff
end
return something
end
这不仅非常好,而且因为nothing
是Void
类型的单例,y==nothing
实际上会编译掉,所以if语句实际上没有运行时成本这里。我深入讨论in a blog post,但它的真正含义是函数自动特化允许在类型稳定/可推断的函数中对任何事物进行无差别检查。
但是,您可能需要考虑将其拆分为两个不同的功能:
function sum_these(x)
return something
end
function sum_these(x, y)
do stuff
return something
end
当然,这只是一种风格差异,正确的选择取决于return something
中共享的代码量。
答案 1 :(得分:2)
也许使用带有空回退的多次发送?
function f(x, y=nothing)
...
do_something(x, y)
...
return something
end
do_something(x, y) = nothing
function do_something(x, y::Void)
...
end
根据需要将其他相关变量添加到do_something
,并根据需要返回或变异。
答案 2 :(得分:0)
你的问题有点令人困惑。看起来你想要的是
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
也许我误解了你的问题。