使用 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.Stringimport 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