Ale*_*lec 2 alias function-composition julia
我可以像这样为单个函数设置别名:
julia> f(y;x=1) = x * y
f (generic function with 2 methods)
julia> const g = f
f (generic function with 1 method)
julia> g(3,x=2)
6
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用复合函数来做到这一点,kwarg 会引起麻烦:
julia> const gg= sqrt ? f
#62 (generic function with 1 method)
julia> gg(3,x=2)
ERROR: MethodError: no method matching (::Base.var"#62#63"{typeof(sqrt),typeof(f)})(::Int64; x=2)
Closest candidates are:
#62(::Any...) at operators.jl:875 got unsupported keyword argument "x"
Run Code Online (Sandbox Code Playgroud)
这个问题有方法解决吗?我正在尝试将参数传递给f,然后通过快捷方式(gg在上面的 MWE 中)转换该结果。
您有以下定义:
?(f, g) = (x...)->f(g(x...))
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它不支持关键字参数。也许你可以打开一个问题来讨论允许它们。
现在你可以像这样定义你自己的版本:
julia> ?(f, g) = (x...; kw...)->f(g(x...; kw...))
? (generic function with 1 method)
julia> f(y;x=1) = x * y
f (generic function with 1 method)
julia> const gg = sqrt ? f
#1 (generic function with 1 method)
julia> gg(3,x=2)
2.449489742783178
Run Code Online (Sandbox Code Playgroud)
编辑:
我已切换到其他操作系统,我发现?这里的效果不是很清晰。我使用了以下符号:
help?> ?
"?" can be typed by \diamond<tab>
Run Code Online (Sandbox Code Playgroud)
它被定义为允许作为中缀运算符并且相对容易记住而不是遮蔽?.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |