Поиск…


Синтаксис

  • использование сокетов
  • Compat.String
  • Compat.UTF8String
  • @compat f. (x, y)

замечания

Иногда очень сложно получить новый синтаксис, чтобы хорошо играть с несколькими версиями. Поскольку Julia все еще активно развивается, часто полезно просто отказаться от поддержки старых версий и вместо этого нацелить только более новые.

Номера версий

У Джулии есть встроенная реализация семантического управления версиями, открытая через тип VersionNumber .

Чтобы построить VersionNumber как литерал, можно использовать строковый макрос @v_str :

julia> vers = v"1.2.0"
v"1.2.0"

В качестве альтернативы можно вызвать конструктор VersionNumber ; обратите внимание, что конструктор принимает до пяти аргументов, но все, кроме первого, являются необязательными.

julia> vers2 = VersionNumber(1, 1)
v"1.1.0"

Номера версий можно сравнивать с помощью операторов сравнения и, следовательно, их можно сортировать:

julia> vers2 < vers
true

julia> v"1" < v"0"
false

julia> sort([v"1.0.0", v"1.0.0-dev.100", v"1.0.1"])
3-element Array{VersionNumber,1}:
 v"1.0.0-dev.100"
 v"1.0.0"
 v"1.0.1"

Номера версий используются в нескольких местах по всей Юлии. Например, константа VERSION является VersionNumber :

julia> VERSION
v"0.5.0"

Это обычно используется для оценки условного кода, в зависимости от версии Julia. Например, для запуска другого кода на v0.4 и v0.5 можно сделать

if VERSION < v"0.5"
    println("v0.5 prerelease, v0.4 or older")
else
    println("v0.5 or newer")
end

Каждый установленный пакет также связан с текущим номером версии:

julia> Pkg.installed("StatsBase")
v"0.9.0"

Использование Compat.jl

Пакет Compat.jl позволяет использовать некоторые новые функции и синтаксис Julia со старыми версиями Julia. Его функции документированы на его README, но ниже приводится описание полезных приложений.

0.5.0

Унифицированный тип строки

В Julia v0.4 было много разных типов строк . Эта система считалась слишком сложной и запутанной, поэтому в Julia v0.5 остается только тип String . Compat позволяет использовать тип и конструктор String версии 0.4 под именем 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 typealiased в ByteString , который является Union{ASCIIString, UTF8String} . Таким образом, типы с String полями не будут стабильными по типу. В этих ситуациях рекомендуется Compat.UTF8String , так как это будет означать String на v0.5 и UTF8String на v0.4, оба из которых являются конкретными типами.
  • Нужно быть осторожным, чтобы использовать 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

Компактный синтаксис вещания

Julia v0.5 вводит синтаксический сахар для broadcast . Синтаксис

f.(x, y)

для broadcast(f, x, y) . Примеры использования этого синтаксиса включают 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 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow