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

检查julia中的函数调用是否使用可选参数的“最佳实践”方法是什么,julia,Julia,在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具有相同含义的值 编辑 为了清

在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,则发生的事件y很重要,对于我的情况,设置y=[some number]是不可取的。经过一番搜索,我认为,除非有人提供更好的解决方案,否则应该采取以下措施:

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

你的问题有点让人困惑。看来你想要的是

function sum_these(x, y=1)
    return x + y
end
但这也不能完全满足您的要求,因为即使在您的示例中调用sum_these3,0,它也会将0替换为1

同样在Python中,我会使用

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

也许我误解了你的问题。

你的问题有点让人困惑。看来你想要的是

function sum_these(x, y=1)
    return x + y
end
但这也不能完全满足您的要求,因为即使在您的示例中调用sum_these3,0,它也会将0替换为1

同样在Python中,我会使用

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

也许我误解了你的问题。

可能使用多个调度,并有一个空的后备

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

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

根据需要添加其他相关变量以执行某些操作,并根据需要返回某些内容或进行变异。

是否可以使用带空回退的多重分派

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

do_something(x, y) = nothing
function do_something(x, y::Void)
    ...
end
function sum_these(x, y=nothing)
  if y == nothing
    do stuff
  end
  return something 
end 
根据需要添加其他相关变量以执行某些操作,并根据需要返回某些内容或进行变异

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 
当然,这只是风格上的差异,正确的选择取决于返回内容中共享了多少代码

这不仅非常好,而且因为nothing是Void类型的单例,因此y==nothing实际上会编译掉,因此if语句在这里实际上没有运行时开销。我深入讨论了这一点,但它真正的意思是,函数自动专门化允许对类型稳定/可推断函数中的任何内容进行检查

但是,你可能想考虑把这个分解成两个不同的函数:

function sum_these(x)
  return something 
end 

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

当然,这只是一种风格差异,正确的选择取决于返回内容中共享了多少代码。

可能这不适合您的用例,但通常您不需要这样做,您可以将默认值设置为1或参数的某个函数。您的用例有点神秘,所以很难帮上忙。然而,另一种选择是定义两个单独的方法,sum_thesex和sum_thesex,y,也许让一个调用另一个。如果您提供更多详细信息,将更容易提供帮助。可能这不适合您的用例,但通常您不需要这样做,您可以将默认值设置为1或参数的某个函数。您的用例有点神秘,因此很难提供帮助。然而,另一种选择是定义两个单独的方法,sum_thesex和sum_thesex,y,也许让一个调用另一个。如果你提供更多的细节,这将更容易提供帮助。不过,问题是关于“最佳实践”,在这种情况下,我怀疑y=nothing版本并不完全适用。我的印象是,这是一种迂回的方式来处理只有一个输入的情况,并以“Python方式”进行处理,而不仅仅是显式地使用多个分派。如果提供了两个输入,但第二个输入什么都没有呢?然后,它将被视为与单参数方法相同的方法,但也许它应该是一个错误。就风格而言,我认为分成两种方法更好,但并不总是更好。如果有很多重复的代码,把它们放在一起就更好了。或者可能有一个内部功能,做些什么。。。如果您拆分函数,则返回某个部分。一如既往,这取决于具体情况。然而,一个重要的事实是,对单例进行编译器优化会导致两种形式都同样最优。是的,这个问题没有明确的答案,因为细节太少,而且我的建议并不总是更好。但我因此试图猜测OP的意图,我的猜测是问题的核心是如何创建可以有一个或两个输入的函数。我认为,默认的答案是使用两种不同的方法,但这确实取决于其他情况。不过,问题是关于“最佳实践”,在这种情况下,我怀疑y=nothing
版本不完全是这样。我的印象是,这是一种迂回的方式来处理只有一个输入的情况,并以“Python方式”进行处理,而不仅仅是显式地使用多个分派。如果提供了两个输入,但第二个输入什么都没有呢?然后,它将被视为与单参数方法相同的方法,但也许它应该是一个错误。就风格而言,我认为分成两种方法更好,但并不总是更好。如果有很多重复的代码,把它们放在一起就更好了。或者可能有一个内部功能,做些什么。。。如果您拆分函数,则返回某个部分。一如既往,这取决于具体情况。然而,一个重要的事实是,对单例进行编译器优化会导致两种形式都同样最优。是的,这个问题没有明确的答案,因为细节太少,而且我的建议并不总是更好。但我因此试图猜测OP的意图,我的猜测是问题的核心是如何创建可以有一个或两个输入的函数。我认为,默认的答案是使用两种不同的方法,但这确实取决于其他情况。