在此 Julia 代码中如何将字符串分配给结构?
How is a string assigned to a struct in this Julia code?
我在看this thread
我正在尝试理解以下代码行:
struct Foo end
(::Type{Float64})(::Foo) = "not a Float64"
它似乎将字符串分配给类型为 Foo
的变量,但我在左侧没有看到任何变量声明。
这是怎么回事?
这里发生了一些事情。
- 该行是方法,不是变量赋值。
f(x) = "blah"
是 的单行语法
function f(x)
"blah"
end
(::Foo)
部分实际上是该方法的 1 个注释参数。参数的名称可以省略,只是不能在方法体中使用参数,因为没有变量引用它。参数仅分派方法。例如,f(::Foo) = "blah"
适用于 f(Foo())
但不适用于 f(Bar())
。
(::Type{Float64})
部分而不是方法名称表明这是一个 functor。 (f::F)(x) = x*f.suffix
意味着结构 F
的实例可以像方法 F(".net")("something")
一样被调用。名称 f
不是方法名称,不会存在供您使用,它是用来引用要在方法中使用的 F
的实例。如果方法中没有使用名称,则可以省略 (::F)(x) = x*".com"
.
Type{Float64}
是一个类型,它的唯一实例是Float64
,所以这意味着你只能通过调用Float64(Foo())
来使用这个方法。在我看来,定义一个方法 Base.Float64(::Foo) = "not a Float64"
是等价的,我实际上不知道他们为什么选择仿函数语法。
当您看到被括号包围的注释时,注释只能属于括号中和左侧的任何内容。 f::Foo
表示 f 被注释为 Foo
,f(::Foo)
表示匿名参数被注释为 Foo
。
我在看this thread
我正在尝试理解以下代码行:
struct Foo end
(::Type{Float64})(::Foo) = "not a Float64"
它似乎将字符串分配给类型为 Foo
的变量,但我在左侧没有看到任何变量声明。
这是怎么回事?
这里发生了一些事情。
- 该行是方法,不是变量赋值。
f(x) = "blah"
是 的单行语法
function f(x)
"blah"
end
(::Foo)
部分实际上是该方法的 1 个注释参数。参数的名称可以省略,只是不能在方法体中使用参数,因为没有变量引用它。参数仅分派方法。例如,f(::Foo) = "blah"
适用于f(Foo())
但不适用于f(Bar())
。(::Type{Float64})
部分而不是方法名称表明这是一个 functor。(f::F)(x) = x*f.suffix
意味着结构F
的实例可以像方法F(".net")("something")
一样被调用。名称f
不是方法名称,不会存在供您使用,它是用来引用要在方法中使用的F
的实例。如果方法中没有使用名称,则可以省略(::F)(x) = x*".com"
.Type{Float64}
是一个类型,它的唯一实例是Float64
,所以这意味着你只能通过调用Float64(Foo())
来使用这个方法。在我看来,定义一个方法Base.Float64(::Foo) = "not a Float64"
是等价的,我实际上不知道他们为什么选择仿函数语法。
当您看到被括号包围的注释时,注释只能属于括号中和左侧的任何内容。 f::Foo
表示 f 被注释为 Foo
,f(::Foo)
表示匿名参数被注释为 Foo
。