Julia: @callsuper ๋งคํฌ๋กœ ์ถ”๊ฐ€

์— ๋งŒ๋“  2016๋…„ 08์›” 26์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

https://github.com/JuliaLang/julia/pull/13123 ์— ๋”ฐ๋ผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ invoke ๋กœ ๋งŒ๋“ค๊ณ  ๋” ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“œ๋Š” @supercall ๋งคํฌ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ˜„์žฌ ๊ตฌํ˜„:

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) ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์›ํ•˜๋Š” ํ˜ธ์ถœ ์„œ๋ช…์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด typeasserts๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

invoke์— ์‚ฌ์šฉ๋œ ์œ ํ˜•์€ ์‹ค์ œ๋กœ ์ œ๊ณต๋œ ๊ฐ’์˜ ์ƒ์œ„ ์œ ํ˜•์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋˜๋Š” <strong i="5">@invoke</strong> foo(x, y::T) ๊ฐ€ invoke(foo, (typeof(x), T), x,y) ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์›ํ•˜๋Š” ํ˜ธ์ถœ ์„œ๋ช…์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด typeasserts๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ 1.0 ์ดํ›„๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Triage๋Š” ๋˜ํ•œ 1.0์— ๋Œ€ํ•ด invoke ๋ฅผ ์ œ๊ฑฐํ•  ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰