Julia中Returns()函数的目的是什么? Returns()函数在Julia中的作用是什么?

5

Julia 1.7增加了Returns()函数,该函数被描述为:

创建一个可调用的f,使得f(args...; kw...) === value成立。

然而,您可以通过接受任何参数的常规函数获得相同的结果:

f1 = Returns(99)
f2(args... ; kwargs...) = return 99
f1() === f2()                                       # true
f1("this", 1) === f2("that", 2)                     # true
<代码> Returns() 除了创建一个返回固定结果的函数的快捷方式外,还有其他用途吗? PDF 文档 根本没有解释<代码>Returns()。
1个回答

3

当一些API需要一个函数,但你需要一个恒定的值时,我认为Returns非常有用。

以下是与DataFrames.jl结合使用的示例。让我们取一些数据框并向其添加一个恒定列:

julia> using DataFrames

julia> df = DataFrame(x=1:4)
4×1 DataFrame
 Row │ x
     │ Int64
─────┼───────
   11
   22
   33
   44

julia> transform(df, Returns(1))
4×2 DataFrame
 Row │ x      x1
     │ Int64  Int64
─────┼──────────────
   11      1
   22      1
   33      1
   44      1

有其他方法可以执行这个操作,但是这种情况下非常有用 - transform 函数需要一个函数作为参数。

它的更高级用法之一是创建闭包:

julia> x = [1, 2, 3]
3-element Vector{Int64}:
 1
 2
 3

julia> y = Returns(x)
Returns{Vector{Int64}}([1, 2, 3])

julia> y()
3-element Vector{Int64}:
 1
 2
 3

julia> push!(x, 100)
4-element Vector{Int64}:
   1
   2
   3
 100

julia> y()
4-element Vector{Int64}:
   1
   2
   3
 100

从上面可以看到,如果与x绑定的底层向量发生了变化,则y的返回值会被更新。请注意,这种捕获是类型稳定的。

另请参见该PR中的讨论以及此回答中的示例用法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接