Szukaj…


Składnia

  • using Compat
  • Compat.String
  • Compat.UTF8String
  • @compat f. (x, y)

Uwagi

Czasami bardzo trudno jest uzyskać nową składnię, aby dobrze grać z wieloma wersjami. Ponieważ Julia wciąż jest aktywnie rozwijana, często przydatne jest po prostu porzucenie obsługi starszych wersji i kierowanie ich tylko na nowsze.

Numery wersji

Julia ma wbudowaną implementację wersjonowania semantycznego udostępnianą przez typ VersionNumber .

Aby skonstruować VersionNumber jako literał, można użyć makra @v_str :

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

Alternatywnie można wywołać konstruktora VersionNumber ; zauważ, że konstruktor akceptuje do pięciu argumentów, ale wszystkie oprócz pierwszego są opcjonalne.

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

Numery wersji można porównywać za pomocą operatorów porównania , a tym samym można sortować:

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"

Numery wersji są używane w kilku miejscach w całej Julii. Na przykład stała VERSION to VersionNumber :

julia> VERSION
v"0.5.0"

Jest to powszechnie używane do oceny kodu warunkowego, w zależności od wersji Julii. Na przykład, aby uruchomić inny kod w wersjach v0.4 i v0.5, można to zrobić

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

Każdy zainstalowany pakiet jest również powiązany z bieżącym numerem wersji:

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

Korzystanie z Compat.jl

Pakiet Compat.jl umożliwia korzystanie z niektórych nowych funkcji i składni Julii ze starszymi wersjami Julii. Jego funkcje są udokumentowane na README, ale podsumowanie przydatnych aplikacji znajduje się poniżej.

0,5.0

Ujednolicony typ ciągu

W Julii v0.4 istniało wiele różnych typów ciągów . Ten system został uznany za zbyt skomplikowany i zagmatwany, więc w Julii v0.5 pozostaje tylko typ String . Compat pozwala na użycie typu String i konstruktora w wersji 0.4, pod nazwą Compat.String . Na przykład ten kod v0.5

buf = IOBuffer()
println(buf, "Hello World!")
String(buf)  # "Hello World!\n"

można bezpośrednio przetłumaczyć na ten kod, który działa zarówno w wersji 0.5, jak i wersji 0.4:

using Compat
buf = IOBuffer()
println(buf, "Hello World!")
Compat.String(buf)  # "Hello World!\n"

Pamiętaj, że istnieją pewne zastrzeżenia.

  • W wersji 0.4 Compat.String jest typizowane na ByteString , czyli Union{ASCIIString, UTF8String} . Zatem typy z polami String nie będą stabilne. W takich sytuacjach zaleca się Compat.UTF8String , ponieważ będzie to oznaczać String w wersji v0.5 i UTF8String w wersji UTF8String , które są typami konkretnymi.
  • Trzeba uważać, aby używać Compat.String lub import Compat: String Compat.String import Compat: String , ponieważ sam String ma znaczenie w wersji 0.4: jest to przestarzały alias dla AbstractString . Znakiem, że String został przypadkowo użyty zamiast Compat.String jest, jeśli w dowolnym momencie pojawią się następujące ostrzeżenia:
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

Kompaktowa składnia nadawcza

Julia v0.5 wprowadza cukier syntaktyczny do broadcast . Składnia

f.(x, y)

jest obniżony do broadcast(f, x, y) . Przykłady użycia tej składni obejmują sin.([1, 2, 3]) aby przyjąć sinus wielu liczb jednocześnie.

W wersji 0.5 składnia może być używana bezpośrednio:

julia> sin.([1.0, 2.0, 3.0])
3-element Array{Float64,1}:
 0.841471
 0.909297
 0.14112 

Jeśli jednak spróbujemy tego samego na wersji 0.4, otrzymamy błąd:

julia> sin.([1.0, 2.0, 3.0])
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}

Na szczęście Compat sprawia, że ta nowa składnia nadaje się również do użytku z wersji 0.4. Jeszcze raz dodajemy using Compat . Tym razem @compat wyrażenie @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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow