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

Yve*_*ves 1 types function optional-arguments julia

是朱莉娅的文档。

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

function parse(type, num, base=10)
    ###
end
Run Code Online (Sandbox Code Playgroud)

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

parse(Int,"12",3)
parse(Int,"12")
Run Code Online (Sandbox Code Playgroud)

我已经测试过它并且确实有效。

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

type MyTest

  testShow::Function

  function MyTest()
    this = new()

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

    return this
  end

end
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

错误:LoadError:语法:“p2=1”不是有效的函数参数名称

Dav*_*ers 5

您似乎试图模仿其他面向对象语言(例如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))
Run Code Online (Sandbox Code Playgroud)

这是与其他语言不同的范式,尝试强迫 Julia 像其他语言一样运行是没有意义的。julia-users 邮件列表上有很多关于此的讨论。

  • Julia 的 OOP 是“传统”OOP 的概括,即。在 Python 中:`x.foo(y)`; 在 Julia 中“foo(x, y)”。但Python实际上也在做`foo(x, y)`,只是在这种情况下简单的调度`x`是特殊的并且拥有该方法(`x.foo(y)`只是语法糖)。由于 Julia 有多个调度,这是没有意义的。 (3认同)