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 邮件列表上有很多讨论。
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 邮件列表上有很多讨论。