Julia: إضافةcallsuper ماكرو

تم إنشاؤها على ٢٦ أغسطس ٢٠١٦  ·  3تعليقات  ·  مصدر: JuliaLang/julia

وفقًا لـ https://github.com/JuliaLang/julia/pull/13123 ، يمكننا إضافة ماكرو @supercall يحلّ الواجهة إلى invoke ويجعلها أكثر سهولة. تطبيقي الحالي:

macro callsuper(ex)
    ex.head == :call || error("<strong i="9">@invoke</strong> requires a call expression")
    args = ex.args[2:end]
    types = Symbol[]
    vals = Symbol[]
    blk = quote end
    for arg in args
            val = gensym()
            typ = gensym()
            push!(vals, val)
            push!(types, typ)
            if isa(arg,Expr) && arg.head == :(::) && length(arg.args) == 2
                push!(blk.args, :($typ = $(esc(arg.args[2]))))
                push!(blk.args, :($val = $(esc(arg.args[1]))::$typ))
            else
                push!(blk.args, :($val = $(esc(arg))))
                push!(blk.args, :($typ = typeof($val)))
            end
    end
    push!(blk.args, :(invoke($(esc(ex.args[1])), ($(types...),), $(vals...))))
    return blk
end

يمكن الحصول على دعم وسائط الكلمات الرئيسية من https://github.com/JuliaLang/julia/pull/11165.

design help wanted speculative

التعليق الأكثر فائدة

أو ربما يتحول <strong i="5">@invoke</strong> foo(x, y::T) إلى invoke(foo, (typeof(x), T), x,y) ، على سبيل المثال ، يمكنك استخدام أدوات الكتابة للإشارة إلى توقيع المكالمة المطلوب.

ال 3 كومينتر

هل يجب أن تكون الأنواع المستخدمة في الاستدعاء أنواعًا فائقة من القيم المقدمة؟

أو ربما يتحول <strong i="5">@invoke</strong> foo(x, y::T) إلى invoke(foo, (typeof(x), T), x,y) ، على سبيل المثال ، يمكنك استخدام أدوات الكتابة للإشارة إلى توقيع المكالمة المطلوب.

كميزة جديدة ، يمكن اعتبارها post-1.0. يشعر الفرز أيضًا أنه من غير المحتمل أن نزيل invoke مقابل 1.0.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

thofma picture thofma  ·  3تعليقات

dpsanders picture dpsanders  ·  3تعليقات

Keno picture Keno  ·  3تعليقات

felixrehren picture felixrehren  ·  3تعليقات

TotalVerb picture TotalVerb  ·  3تعليقات