【问题标题】:Julia: function with optional argument of type Vector but default to null?Julia:具有 Vector 类型的可选参数但默认为 null 的函数?
【发布时间】:2018-08-28 14:34:51
【问题描述】:

我有一个函数f(x)。我希望该函数具有向量类型的可选参数。例如,f(x; y::Vector=[1,2,3])。但是,我希望默认值是其他值(null?missing?void?),以便我可以轻松捕获它并对其做出反应。

在 R 中,我会说 function(x, y=NULL){},然后是 if(is.null(y)){whatever}

做类似事情最明智的方式是什么?

【问题讨论】:

标签: function null arguments julia default


【解决方案1】:

Engineero 在评论中引用的模式是最简洁的,但它假定了一个位置参数。如果您坚持在函数中使用关键字参数(就像您在问题中所做的那样),请使用:

function f(x; y::Union{Vector, Nothing}=nothing)
    if y === nothing
        # do something
    else
        # do something else
    end
end

这通常只有在你有很多关键字参数时才需要,否则我建议定义具有不同位置参数签名的方法。

当然,如果您认为它更可取,也可以将此模式与nothing 一起用于位置参数。

【讨论】:

  • 该死……每次我检查这种语言时,一切都再次发生了变化……Nullable 发生了什么??
  • 它被移出到 Nullables.jl 包。简而言之:现在你有 nothingNothing 的单例实例,由于 Julia 1.0 的改进,推荐的风格是使用联合类型,如 Union{Int, Nothing} 然后 nothing 表示缺少该值(因此有时您必须使用Some 类型来区分缺少值和nothing 是有效值的情况。
  • 另外值得注意的是,由于最近版本中的联合拆分优化,您的解决方案中的代码应该很快:julialang.org/blog/2018/08/union-splitting
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多