Sök…


Syntax

  • med hjälp av Compat
  • Compat.String
  • Compat.UTF8String
  • @compat f. (x, y)

Anmärkningar

Det är ibland mycket svårt att få ny syntax för att spela bra med flera versioner. Eftersom Julia fortfarande håller på att utvecklas är det ofta användbart att släppa stöd för äldre versioner och istället rikta in sig bara på de nyare.

Versionsnummer

Julia har en inbyggd implementering av semantisk versionering exponerad genom typen VersionNumber .

För att konstruera en VersionNumber som en bokstav kan @v_str strängmakroen användas:

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

Alternativt kan man ringa VersionNumber konstruktorn; Observera att konstruktören accepterar upp till fem argument, men alla utom de första är valfria.

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

Versionsnummer kan jämföras med jämförande operatörer och kan således sorteras:

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"

Versionsnummer används på flera platser över hela Julia. Till exempel är VERSION konstanten en VersionNumber :

julia> VERSION
v"0.5.0"

Detta används ofta för utvärdering av villkorlig kod, beroende på Julia-versionen. Till exempel, för att köra annan kod på v0.4 och v0.5, kan man göra

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

Varje installerat paket är också associerat med ett aktuellt versionnummer:

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

Använda Compat.jl

Compat.jl-paketet möjliggör användning av några nya Julia-funktioner och syntax med äldre versioner av Julia. Dess funktioner är dokumenterade på sin README, men en sammanfattning av användbara applikationer ges nedan.

0.5.0

Unified String type

I Julia v0.4 fanns det många olika typer av strängar . Detta system ansågs vara alltför komplicerat och förvirrande, så i Julia v0.5 återstår det bara String typen. Compat tillåter användning av String typ och konstruktör på version 0.4, under namnet Compat.String . Till exempel den här v0.5-koden

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

kan översättas direkt till den här koden, som fungerar på både v0.5 och v0.4:

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

Observera att det finns några varningar.

  • På v0.4 är Compat.String typiserad till ByteString , som är Union{ASCIIString, UTF8String} . Således kommer typer med String inte att vara typstabila. I dessa situationer Compat.UTF8String , eftersom det kommer att betyda String on v0.5, och UTF8String på v0.4, som båda är betongtyper.
  • Man måste vara noga med att använda Compat.String eller import Compat: String , eftersom String själv har en betydelse på v0.4: det är ett utskrivet alias för AbstractString . Ett tecken på att String oavsiktligt användes i stället för Compat.String är om någon gång följande varningar visas:
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

Kompakt sändningssyntax

Julia v0.5 introducerar syntaktiskt socker för broadcast . Syntaxen

f.(x, y)

sänks för att broadcast(f, x, y) . Exempel på användning av denna syntax inkluderar sin.([1, 2, 3]) att ta sinus för flera nummer på en gång.

På v0.5 kan syntaxen användas direkt:

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

Men om vi försöker detsamma på v0.4 får vi ett fel:

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

Lyckligtvis gör Compat denna nya syntax användbar från v0.4 också. Återigen lägger vi till using Compat . Den här gången omger vi uttrycket med @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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow