首页 > 解决方案 > 朱莉娅 => 的目的是什么

问题描述

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

例如,

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

df2 = DataFrame("x"=>1:2, "y"=> 11: 12)

两者都返回相同的结果,

│ Row │ x     │ y     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 11    │
│ 2   │ 2     │ 12    │

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

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

x = 10

输出/输出:10

"y"=>10

输出/输出:"y" => 10

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

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

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

标签: julia

解决方案


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

@edit 1 => 2

在源代码中您将看到:

Pair(a, b) = Pair{typeof(a), typeof(b)}(a, b)
const => = Pair

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

值得注意的是,您会发现在 DataFrames.jl=>中和中使用的形式和形式一样,可以是任何东西。只是为了做一个比较:Dicta => bab

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

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

现在

df2 = DataFrame("x"=>1:2, "y"=>11:12)

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

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


推荐阅读