julia - 使用可选的位置参数定义 Julia 函数

标签 julia default-value positional-parameter

从这里 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

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

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

最佳答案

答案很简单:

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

Optional arguments are actually just a convenient syntax for writing multiple method definitions with different numbers of arguments



就好像他们正在创建一些已经知道哪些是一些参数的“函数”。你写:
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) 以保持讨论简单)。

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

你可以这样定义一个只需要一个位置参数的函数:
function defaults(a,b=4,x=5,y=6)
    return "$a $b and $x $y"
end

还有更多信息here .

关于julia - 使用可选的位置参数定义 Julia 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734888/

相关文章:

pointers - 使用pointer_from_objref() 和Ref() 的正确方法是什么?

arrays - 如何在 Julia 中以树状结构存储数据

具有默认值的 C++ 可变参数模板函数参数

c++ - 具有默认值的参数的自动类型推导

llvm - 从 Julia 脚本生成可运行的 LLVM IR?

multithreading - 如何让这个简单的 Julia 代码接近最佳并行效率?

python - Django:如何为内联模型表单集中的字段设置初始值?

python 语法错误: positional argument follows keyword argument

linux - 如何重新排列输出文件以获得泳道中并以空格分隔的数字?

flutter - Dart 中命名参数和位置参数有什么区别?