(с использованием Julia 0.3.11) У меня возникли проблемы со шрифтом - аннотирование корректно некоторых из моего кода в исходной версии, которую мы использовали ASCIIString
- для аннотации любая строка, «избегать» абстрактных типов, но давайте начнем с примера, это может быть связано с тем, что я видел реферируемых как «треугольной отправки» в некоторых дискуссиях здесь:Функциональные подписи и подтипы Julia, в частности String, ByteString
# How to type annotate this (sortof "Dictionary with default)
function pushval!(dict, key, val)
key in keys(dict) ? push!(dict[key], val) : dict[key] = [val]
return dict
end
d1 = Dict{ASCIIString, Vector{Int}}()
d2 = Dict{String, Vector{Int}}()
pushval!(d1, "a", 1)
pushval!(d2, "a", 1)
Ok (в первую очередь - если есть более идиоматический способ построения словаря со значениями по умолчанию, в этом случае пустой массив, я хотел бы услышать об этом)
Итак, теперь я попытался набрать аннотированный текст:
function pushval!{K, V} (dict::Dict{K, Vector{V}} , key, val)
Многое больше документирует и работает. Но теперь наступает более сложная часть - я хочу, чтобы «ключ» был любым подтипом K, а val - любые подтипы V (справа?), Например - я хотел бы сделать словарь String - который является абстрактным типом, но использовать конкретные ключи - которые AsciiString/байтовой строки/UTF8String,
Я думал, что я должен написать один из следующих параметров:
function pushval!{K, V} (dict::Dict{K, Vector{V}} , key::KK <: K, val:: VV <: V)
function pushval!{K, V, KK <: K, VV <: V} (dict::Dict{K, Vector{V}} , key::KK, val::VV)
одно из решений, как предполагают, в (Can I use a subtype of a function parameter in the function definition?) что-то с «новообращенного».
Но все это заставило меня задуматься о коде Юлии, который я пишу, я начал писать систему - используя String, FloatingPoint, Number и такие абстрактные типы, когда я действительно пытался запустить его, я вернули, чтобы преобразовать все в конкретные типы только для того, чтобы получить работу на данный момент ...
Есть ли рекомендуемая кодовая база для чтения в качестве ссылки на идиоматический код Юлии? Как и сама реализация словаря Julia, присваиваем оператор даже. Есть ли часть стандартной библиотеки, которую можно считать полезной для начала? благодаря
Это здорово знать, так что это случай «треугольной отправки» в конце концов. и я не знал о получении!(), которая является идиомой, в которой я нуждаюсь здесь! благодаря! – oyd11
В: Я попытался добавить 'key :: K; val :: V; '- как утверждения типа при входе функции. Хотя на REPL - они, кажется, дают утверждения, которые я ожидаю - внутри функции - они, кажется, игнорируются, я должен был написать их как «@assert (typeof (key) <: K) и т. Д., Что я и думал «key :: K» сделал бы, какой-нибудь ввод? – oyd11
У меня есть подозрение, но я не уверен, что я имею в виду то же самое. Не могли бы вы разместить еще какой-нибудь код? (Может быть, вы должны задать это как еще один вопрос?) – user4235730