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