使用 Compat.jl
该 Compat.jl 包能够使用一些新的朱莉娅功能和语法与旧版本朱莉娅。其功能记录在自述文件中,但下面给出了有用应用程序的摘要。
Version < 0.5.0
统一字符串类型
在 Julia v0.4 中,有许多不同类型的字符串 。这个系统被认为过于复杂和混乱,所以在 Julia v0.5 中,仍然只有 String
类型。Compat
允许在版本 0.4 上使用 String
类型和构造函数,名称为 Compat.String
。例如,这个 v0.5 代码
buf = IOBuffer()
println(buf, "Hello World!")
String(buf) # "Hello World!\n"
可以直接翻译为此代码,该代码适用于 v0.5 和 v0.4:
using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf) # "Hello World!\n"
请注意,有一些警告。
- 在 v0.4 中,
Compat.String
的类型为ByteString
,即Union{ASCIIString, UTF8String}
。因此,具有String
字段的类型将不是类型稳定的。在这些情况下,建议使用Compat.UTF8String
,因为它意味着 v0.5 上的String
和 v0.4 上的UTF8String
,两者都是具体类型。 - 人们必须小心使用
Compat.String
或import Compat: String
,因为String
本身对 v0.4 有意义:它是AbstractString
的一个弃用别名。意外使用String
代替Compat.String
的标志是,如果在任何时候出现以下警告:
WARNING: Base.String is deprecated, use AbstractString instead.
likely near no file:0
WARNING: Base.String is deprecated, use AbstractString instead.
likely near no file:0
紧凑的广播语法
朱莉娅 v0.5 为 broadcast
介绍了语法糖。语法
f.(x, y)
被降到了天 .19。使用此语法的示例包括 sin.([1, 2, 3])
一次获取多个数字的正弦值。
在 v0.5 上,语法可以直接使用:
julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112
但是,如果我们在 v0.4 上尝试相同的操作,则会出现错误:
julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
幸运的是,Compat
也可以从 v0.4 开始使用这种新语法。我们再次添加 using Compat
。这一次,我们用 @compat
宏包围表达式:
julia> using Compat
julia> @compat sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
0.841471
0.909297
0.14112