julia:如何为匿名函数使用可选参数

julia: how to use optional arguments for an anonymous function

Here 是 Julia 的文档。

它说我们可以为 Julia 的函数设置可选参数。例如,

function parse(type, num, base=10)
    ###
end

然后我们可以这样调用函数parse

parse(Int,"12",3)
parse(Int,"12")

我已经测试过了,确实有效。

现在我想对类型中的函数做同样的事情。这是一个例子,

type MyTest

  testShow::Function

  function MyTest()
    this = new()

    this.testShow = function(p1, p2 = 1, p3 = 2)
    end

    return this
  end

end

但是我得到一个错误:

ERROR: LoadError: syntax: "p2=1" is not a valid function argument name

匿名函数和命名函数是不同的,例如匿名函数不支持关键字参数,并且它们是非泛型的。 ref

julia> (x,y=0)->x
ERROR: syntax: "y=0" is not a valid function argument name

正如@Reza 所说,匿名函数不支持关键字参数。所以我试着这样做:

type MyTest

  testShow::Function

  function MyTest()
    this = new()

    this.testShow = function tt(p1, p2 = 1, p3 = 2)
    end

    return this
  end

end

我给匿名函数取了个名字tt。虽然 tt 从未使用过,但它仍然有效。

您似乎在尝试模仿其他面向对象语言(例如 Python)做事的方式。然而,这不是 Julia 的工作方式:方法(函数)存在于 Julia 的类型中。

相反,方法存在于 类型之外。例如:

type MyTest
    value::Int
end

function my_show(x::MyTest, p1, p2=1, p3=2)
    x.value * p1 * p2 * p3
end

x = MyTest(10)

println(my_show(x, 3))
println(my_show(x, 3, 3, 3))

这是一种不同于其他语言的范式,试图强迫 Julia 像其他语言一样行事是没有意义的。关于这个问题,julia-users 邮件列表上有很多讨论。