gpt4 book ai didi

chapel - 在 Chapel 中使用类类型作为字段

转载 作者:行者123 更新时间:2023-12-01 15:56:27 24 4
gpt4 key购买 nike

我有以下 Chapel 代码,但它似乎效率低下。

class Student {
var name: string;
proc init(name:string) {this.name = name;}
}

class GoodStudent : Student {
var likesToDate: BadStudent;
proc init(name:string) {super.init(name=name);}
}

class BadStudent : Student {
proc init(name:string) {super.init(name=name);}
}

var students: [1..0] Student;

students.push_back(new GoodStudent("baby"));
students.push_back(new GoodStudent("some other girl"));
students.push_back(new BadStudent("patrick swayze"));

for s in students {
for t in students {
if t:GoodStudent != nil {
var tt = t:GoodStudent;
writeln(tt.name, " :will date?: ", s.name);
if s:tt.likesToDate.type != nil {
writeln(" ... YES!");
} else {
writeln(" ... NO!");
}
}
}
}

我正在使用一个空的 GoodStudent 来比较潜在日期的类型。我宁愿将 GoodStudent 类型保留为字段变量。正确的语法是什么,这样宝宝就可以得到她的约会对象并远离角落?

最佳答案

与任何其他变量一样,可以使用 type 关键字代替 var 来声明类字段,以指定它们表示类型而不是值。具有 type 字段的类是通用的 - 类初始值设定项可以在实例化类时将字段设置为任何类型。这primer example演示在泛型类中使用类型字段。

因为 GoodStudent 只对她 likesToDate 的学生类型感兴趣,而不是任何特定的实例,所以该字段可以用类型字段替换。类型字段在程序执行期间不会像使用 var 声明的版本那样占用任何内存。

class GoodStudent : Student {
type likesToDate = BadStudent;
proc init(name:string) {super.init(name=name);}
}

然后,可以稍微修改主循环以访问类型字段,而不是通过字段的 .type

for s in students {
for t in students {
var tt = t:GoodStudent;
if tt != nil {
writeln(tt.name, " :will date?: ", s.name);
if s:tt.likesToDate != nil {
writeln(" ... YES!");
} else {
writeln(" ... NO!");
}
}
}
}

关于chapel - 在 Chapel 中使用类类型作为字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50159596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com