Die Julia style guide sagt der folgende:Julia: Arrays mit abstrakten Parameter führen zu Fehlern aber Variablen mit abstrakten Typen nicht
nicht unnötig statischen Parameter anwenden. Eine Funktion Signatur:
foo{T<:Real}(x::T) = ...
sollte geschrieben werden als:
foo(x::Real) = ...
erwartete ich das auch auf Array-Parameter anzuwenden. Allerdings, wenn ich den folgenden Code schreiben:
ret1(x::Real) = x
ret2(x::Array{Float64,2}) = x
ret3(x::Array{Real,2}) = x
ret1(1.0)
ret2(rand(2,2))
ret3(rand(2,2))
dann erhalte ich die folgende Ausgabe der Konsole (mit Julia 0.2.1):
MethodError(ret3,(
2x2 Array{Float64,2}:
0.841121 0.322133
0.469432 0.495438,))
Also warum Julia einen Fehler für Arrays mit abstrakten Typ werfen Parameter, aber nicht für Variablen mit abstrakten Typen?
Ja, dachte ich, dass die Antwort wäre. Aber dann erfordert es statische Parameter, die sonst unnötig erscheinen würden. Warum hat Julia keinen Array-Typ, der alle Elemente vom selben Typ erzwingt? – user664303
Ich bin etwas verwirrt, Julia eine unendliche Anzahl von Array-Typen, die alle Elemente des gleichen Typs erzwingen: 'Array {Float64}', 'Array {String}', etc. Bedeutet du etwas, das Elemente erzwingt vom selben Typ, ohne zu spezifizieren, was der Typ ist? –
Was ich vorschlage, ist ein Array-Typ wie ArrayHomogenic {T}, wobei T ein abstrakter Typ wie Real oder Number sein kann, für den der Compiler jedoch weiß, dass jedes Element vom selben Typ ist, unabhängig vom Typ. – user664303