检查julia函数调用中是否使用可选参数的“最佳实践”方法是什么?

时间:2017-08-01 18:43:19

标签: julia

在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 

3 个答案:

答案 0 :(得分:3)

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

这不仅非常好,而且因为nothingVoid类型的单例,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

也许我误解了你的问题。