julia - 朱莉娅 => 的目的是什么
问题描述
据我了解=>
,过去常常将字符串绑定为变量名。
例如,
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 │
这里唯一的区别是 indf1
的x
变量保持1:2
而 indf2
的"x"
字符串保持1:2
。所以,根据上面的结果,我假设从我可以使用的字符串创建变量=>
。
但是当我尝试将值保存在下面的简单变量中时
x = 10
输出/输出:10
"y"=>10
输出/输出:"y" => 10
这个结果我无法理解。当我打印x
时,它10
符合预期。但是当我打印时,y
我得到了UndefVarError
. 我也发现了同样的Symbol
效果:z =>10
=>
我猜我的假设是错误的。因为字符串实际上并没有转换为新变量。
=>
朱莉娅的实际目的是什么?我必须在其中使用=>
而不是=
?
解决方案
要了解什么=>
意思,只需编写:
@edit 1 => 2
在源代码中您将看到:
Pair(a, b) = Pair{typeof(a), typeof(b)}(a, b)
const => = Pair
Soa => b
只是 . 的简写Pair(a, b)
。因此它只是创建了一个类型为Pair
holdinga
的对象b
。它是一个调用(在这种情况下是对构造函数的调用)。这就是全部。它在语言中没有特殊含义。就像1 ÷ 2
是一样div(1, 2)
。
值得注意的是,您会发现在 DataFrames.jl=>
中和中使用的形式和形式一样,可以是任何东西。只是为了做一个比较:Dict
a => b
a
b
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)
为过时的(它不如后一种形式灵活),但它是出于遗留原因而提供的(在玩具示例中它更容易键入)。
推荐阅读
- reactjs - 两种方式绑定和连接子类的 onChange
- python - 怎么修 ”
“在视觉工作室代码中? - python - Scikit-learn:理解 MeanShift fit_predict()
- python - 从“#”分隔的行值中提取最小值和最大值
- c++ - 调用不属于基类的派生类函数的最佳方法是什么?
- php - 如何在特定子字符串之后从字符串中获取值?
- c# - dotnet 实体框架中的早期加载
- java - 未找到属性支付 SDK
- windows - 每次从文件资源管理器打开终端时如何获取 PowerShell 当前位置
- performance - 哪个在 ubuntu 中进行套接字编程更快?python、c++ 或纯 c 可执行文件