" => "在Julia中的作用是什么?

8

据我了解,=> 用于将字符串绑定为变量名。

例如,

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    │

这里唯一的区别在于df1x变量保存了1:2,而df2"x"字符串保存了1:2。所以从上面的结果来看,我认为可以使用=>从字符串中创建变量。

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

x = 10

O/P:10

"y"=>10

O/P:"y" => 10

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

我猜测我关于=>的假设是错误的。因为实际上该字符串并没有被转换为一个新的变量。

=>在Julia中的实际目的是什么? 我什么时候需要使用=>而不是=

1个回答

13

为了理解 => 的含义,只需写入:

@edit 1 => 2

并且在源代码中,您将看到:

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

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

值得注意的是,在 Dict 和 DataFrames.jl 中会使用 =>,例如 a => b 形式,其中 ab 都可以是任何东西。只是为了做个比较:

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

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

现在

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

用两个位置参数调用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)删除为过时(它不如后一种形式灵活),但出于遗留原因提供它(在玩具示例中输入会更容易一些)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接