=> 在朱莉娅中的目的是什么

Moh*_* ah 8 julia

根据我的理解,=>过去常常将字符串绑定为变量名。

例如,

df1 = DataFrame(x=1:2, y= 11: 12)

df2 = DataFrame("x"=>1:2, "y"=> 11: 12)
Run Code Online (Sandbox Code Playgroud)

两者都返回相同的结果,

? Row ? x     ? y     ?
?     ? Int64 ? Int64 ?
???????????????????????
? 1   ? 1     ? 11    ?
? 2   ? 2     ? 12    ?
Run Code Online (Sandbox Code Playgroud)

这里唯一的区别是 indf1x变量保持,1:2而 indf2"x"字符串保持1:2。所以,从上面的结果,我假设从我可以使用的字符串创建变量=>

但是当我尝试在像下面这样的简单变量中保存值时

x = 10

开/关: 10

"y"=>10

开/关: "y" => 10

这个结果我无法理解。当我打印x它时,它10符合预期。但是当我打印时,y我得到了UndefVarError. 我发现同样的效果Symbol:z =>10

=>猜我的假设是错误的。因为字符串实际上并没有转换为新变量。

=>朱莉娅的实际目的是什么?我必须在其中使用=>而不是=?

Bog*_*ski 13

要了解什么=>意思,只需写:

@edit 1 => 2
Run Code Online (Sandbox Code Playgroud)

在源代码中,您将看到:

Pair(a, b) = Pair{typeof(a), typeof(b)}(a, b)
const => = Pair
Run Code Online (Sandbox Code Playgroud)

Soa => b只是 的简写Pair(a, b)。因此它只是创建一个类型为Pairholdera和的对象b。它是一个调用(在本例中是对构造函数的调用)。这就是全部。它在语言中没有特殊含义。就像1 ÷ 2是一样div(1, 2)

值得注意的是,您会发现在 DataFrames.jl=>Dict和中使用的a => b形式a和形式一样,b可以是任何东西。简单对比一下:

df1 = DataFrame(x=1:2, y=11:12)
Run Code Online (Sandbox Code Playgroud)

调用DataFrame带有两个关键字参数 x和的构造函数y。问题是关键字参数被限制为有效标识符(例如它们不允许空格),因此并非您可以想象的所有数据框都可以使用此构造函数创建。

现在

df2 = DataFrame("x"=>1:2, "y"=>11:12)
Run Code Online (Sandbox Code Playgroud)

调用DataFrame带有两个位置参数的构造函数,它们是"x"=>1:2"y"=>11:12。现在,由于Pair可以在左侧容纳任何内容,您可以例如将字符串作为列名传递(并且字符串可以包含您喜欢的任何字符序列)。

换句话说,DataFrame(x=1:2, y=11:12)DataFrame("x"=>1:2, "y"=>11:12)是对数据帧的两个独立构造函数的调用(它们在 DataFrames.jl 包中有完全不同的实现)。实际上,我什DataFrame(x=1:2, y=11:12)至会因为过时而删除(它不如后一种形式灵活),但它是出于遗留原因而提供的(在玩具示例中,它更容易输入)。