在这个Julia代码中,字符串是如何分配给结构的



我正在查看这个线程

我正在尝试理解以下代码行:

struct Foo end
(::Type{Float64})(::Foo) = "not a Float64"

它似乎为Foo类型的变量分配了一个字符串,但我在左侧没有看到任何变量声明。

发生了什么事?

这里发生了一些事情。

  1. 行是一个方法,而不是变量赋值。f(x) = "blah"
function f(x)
"blah"
end
  1. (::Foo)部分实际上是该方法的一个带注释的参数。参数的名称可以省略,只是不能在方法体中使用参数,因为没有变量引用它。参数只分派方法。例如,f(::Foo) = "blah"f(Foo())有效,但对f(Bar())无效。

  2. (::Type{Float64})部分而不是方法名表示这是一个函子。(f::F)(x) = x*f.suffix意味着可以像方法F(".net")("something")一样调用结构体F的实例。名称f不是一个方法名称,也不存在供您使用的名称,它是用来引用方法中要使用的F的实例的。如果在方法(::F)(x) = x*".com"中未使用该名称,则可以省略该名称。

  3. Type{Float64}是唯一实例为Float64的类型,因此这意味着您只能通过调用Float64(Foo())来使用此方法。在我看来,定义一个方法Base.Float64(::Foo) = "not a Float64"是等价的,我实际上不知道他们为什么选择函子语法。

当您看到被括号包围的注释时,该注释只能属于括号中和左边的任何内容。f::Foo表示f用Foo进行注释,f(::Foo)表示匿名参数用Foo进行注释。

最新更新