如何将 bang 字符添加到函子?

How to add the bang character to functors?

按照惯例,我们在任何会改变其参数的函数名称中添加一个爆炸字符 !,那么对于下面的代码示例,我们是否应该在函子名称中添加一个 !

mutable struct Foo
    a::Int
end

(foo::Foo)(val) = foo.a = val

f = Foo(1)  # f.a = 1
f(10)       # f.a = 10

简而言之,可以将最后一行称为f!(10)吗?我只是好奇。谢谢

这里的调用和你的变量名一样。所以如果你想让它包含一个 !,你必须将你的变量命名为 f!:

julia> f! = Foo(1)  # f.a = 1
Foo(1)

julia> f!(4)
4

! 字符没有什么神奇之处,它只是标识符的一部分。所以你必须把 ! 放在 里面 实际的名字, 完全 就像你对函数所做的那样。