【问题标题】:define Julia functions with optional positional arguments使用可选的位置参数定义 Julia 函数
【发布时间】:2018-07-21 22:32:17
【问题描述】:

来自link,它说:

# You can define functions with optional positional arguments
function defaults(a,b,x=5,y=6)
    return "$a $b and $x $y"
end

defaults('h','g') # => "h g and 5 6"
defaults('h','g','j') # => "h g and j 6"
defaults('h','g','j','k') # => "h g and j k"
try
    defaults('h') # => ERROR: no method defaults(Char,)
    defaults() # => ERROR: no methods defaults()
catch e
    println(e)
end

我认为这个例子的目的是表明,如果提供的参数小于默认参数,该函数也将返回默认参数。

但是为什么在提供一个或没有参数时会出现错误?即我怎么知道提供两个参数是可以的,但提供一个或不提供一个参数是不行的?

【问题讨论】:

    标签: julia default-value positional-parameter


    【解决方案1】:

    答案很简单:

    对于函数defaults,它需要提供至少两个参数(ab,它们没有默认值),因为语言规范不允许必需的位置参数处于“未知状态”。如果没有提供默认值,解释器会引发异常。 Citing the manual,可选参数背后的设计原因

    可选参数实际上只是一种方便的语法,用于编写具有不同数量参数的多个方法定义

    就像他们正在创建一些已经知道哪些是参数的“函数”。你写:

    defaults(a,b,x=5,y=6)
    

    内部存在:

    defaults(a, b, x, y)
    defaults(a, b, x, 6)
    defaults(a, b, 5, 6)
    

    (请注意我不写defaults(a, b, 5, y)以保持讨论简单)。

    使用 3 个参数调用 defaults 是可以的,但您将覆盖默认值 x。使用 4 个参数调用它是可以的,但您将覆盖默认值 xy。使用少于 2 个参数调用它是不行的,因为解释器不知道要返回什么(因为您需要 ab 来插入返回的字符串)。

    你可以用这种方式定义一个只需要一个位置参数的函数:

    function defaults(a,b=4,x=5,y=6)
        return "$a $b and $x $y"
    end
    

    还有更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 2018-02-18
      • 2020-07-24
      • 2018-05-20
      • 2019-10-23
      • 2021-11-22
      • 2017-11-26
      相关资源
      最近更新 更多