parametrów na argumenty funkcji są dla metody dezambiguacji niż wydajność. Od docs http://docs.julialang.org/en/latest/manual/style-guide/#avoid-writing-overly-specific-types
Kluczową sprawą jest, aby uświadomić sobie, że nie ma kary wydajność do określenia jedynie ogólną addone (x) = x + jeden (x), ponieważ Julia automatycznie skompilować wyspecjalizowane wersje, ile potrzeba. Na przykład, przy pierwszym wywołaniu addone (12), Julia automatycznie skompiluje wyspecjalizowaną funkcję addone dla argumentów x :: Int, a wywołanie funkcji one() zostanie zastąpione jej wartością podkreśloną 1. Dlatego pierwsze trzy definicje addone powyżej są całkowicie zbędne.
EDIT adresowej komentarza:
Różnica pomiędzy tymi dwoma podpisami jest naprawdę tylko pozorna, gdy istnieje więcej niż jeden argument
Rozważmy dwie funkcje:
julia> function foo(n::Integer, m::Integer)
println(typeof(n), typeof(m))
end
julia> function foo{T<:Integer}(n::T, m::T)
println("Parameterized: ", typeof(n), typeof(m))
end
w pierwsza funkcja n
i m
musi być liczbą całkowitą, ale nie musi być tym samym podtypem liczby całkowitej. W drugiej funkcji, zarówno m
i n
muszą być tego samego podtypu
julia> foo(1, 2)
Parameterized: Int64Int64
julia> foo(1, Int32(1))
Int64Int32
Dzięki, mam swój punkt, ale to tylko część odpowiedzi na moje pytanie. Mój przykład był dość trywialny, przyznaję. Ale widziałem obie formy w bazie Julii i chciałem poznać różnicę między nimi. – Davide
Zaktualizowałem odpowiedź, aby odpowiedzieć na Twój komentarz. – ptb
Tak więc, z jednym argumentem obie formy są równoważne, pierwsza z nich wymaga mniejszego pisania. Dzięki. – Davide