You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

内部构造函数调用的函数如何获取所属struct类型(等价this实现)

实现方案

你可以通过两种常用方式实现需求,第一种是性能最优的显式传参方案,第二种是无需修改调用侧的栈回溯方案:

方案1:显式传入类型标识(最为推荐)

这种方式无额外运行时开销,也不会受代码编译优化影响,实现最简单:

# 修改foo函数,新增类型参数
function foo(arg, struct_type)
    println("当前被调用的struct是:", struct_type)
    # 其余原有逻辑
end

struct A
    arg
    function A(arg)
        # 调用时传入当前struct的类型
        foo(arg, A)
        return new(arg)
    end
end

struct B
    arg
    function B(arg)
        foo(arg, B)
        return new(arg)
    end
end

测试效果:

julia> A(1)
当前被调用的struct是:A
A(1)

julia> B(2)
当前被调用的struct是:B
B(2)

方案2:通过栈回溯自动获取(无需修改调用侧代码)

如果不能改构造函数里的foo调用写法,可以用stacktrace()读取调用栈信息实现:

function foo(arg)
    # 读取调用栈,第2帧就是调用foo的上层函数(第1帧是foo本身)
    st = stacktrace()
    caller_func_name = st[2].func
    # Julia内部构造函数的名称和struct名一致,直接提取即可
    println("当前被调用的struct是:", caller_func_name)
    # 其余原有逻辑
end

struct A
    arg
    function A(arg)
        foo(arg)
        return new(arg)
    end
end

struct B
    arg
    function B(arg)
        foo(arg)
        return new(arg)
    end
end

注意:栈回溯方案会有一定性能损耗,且如果代码开了激进的编译优化可能会导致调用栈信息丢失,生产环境更推荐方案1

内容的提问来源于stack exchange,提问作者ahm5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:45:03