如何通过类型定义访问方法?实现结构体类型与值类型均可调用函数
Julia结构体类型与实例共用方法的修改方案
你的代码问题在于colnames只定义了接受MyStruct实例的方法,而构造函数里传入的是类型MyStruct,导致方法匹配失败。以下是修改后的可运行代码:
struct MyStruct names function MyStruct() names = colnames(MyStruct) # 现在可以正常调用类型方法 new(names) end end # 定义针对MyStruct类型的colnames方法 colnames(::Type{MyStruct}) = ["A", "B"] # 定义针对MyStruct实例的colnames方法 colnames(T::MyStruct) = T.names m = MyStruct() colnames(m) # 正常返回 ["A", "B"]
修改说明:
- 新增
colnames(::Type{MyStruct})方法,专门处理类型调用的场景,构造函数里的colnames(MyStruct)就能匹配到这个方法。 - 实例方法
colnames(T::MyStruct)直接返回实例自身的names字段,既符合结构体的封装逻辑,也满足你通过值类型调用的需求。
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

