1

是 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

但我收到一个错误:

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

4

3 回答 3

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))

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

于 2015-12-11T17:16:54.957 回答
1

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

julia> (x,y=0)->x
ERROR: syntax: "y=0" is not a valid function argument name
于 2015-12-11T16:04:11.133 回答
0

正如@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从未使用过,但它可以工作。

于 2015-12-11T16:10:43.310 回答