将数组分配给教堂 Class 中的 属性
Assign an array to a property in a Chapel Class
这是我需要在 Chapel 中重新创建的类似 Python 的图案。
class Gambler {
var luckyNumbers: [1..0] int;
}
var nums = [13,17,23,71];
var KennyRogers = new Gambler();
KennyRogers.luckyNumbers = for n in nums do n;
writeln(KennyRogers);
产生 运行 时间错误
Kenny.chpl:8: error: zippered iterations have non-equal lengths
我不知道Kenny提前会有多少个幸运数字,那时我无法实例化Kenny。也就是说,我必须稍后分配它们。另外,我需要知道什么时候持有它们,知道什么时候折叠它们。
这是array.push_back
方法的一个很好的应用。要一次插入一个幸运数字,您可以这样做:
for n in nums do
KennyRogers.luckyNumbers.push_back(n);
您还可以在单个 push_back
操作中插入整个数组:
KennyRogers.luckyNumbers.push_back(nums);
还有 push_front
和 insert
方法,以防您需要将元素放在数组的前面或任意位置。
我认为我无法帮助确定何时持有或何时弃牌。
解决这个问题的一种方法是在 Gambler
的初始值设定项中建立 luckyNumbers
,从一开始就使事情的大小正确并避免 resizing/rewriting 数组。为了在不调整大小的情况下执行此操作,您需要声明数组的域并将其也设置在初始化程序中:
class Gambler {
const D: domain(1); // a 1D domain field representing the array's size
var luckyNumbers: [D] int; // declare lucky numbers in terms of that domain
proc init(nums: [?numsD] int) {
D = numsD; // make D a copy of nums's domain; allocates luckyNumbers to the appropriate size
luckyNumbers = nums; // initialize luckyNumbers with nums
super.init(); // mark the initialization of fields as being done
}
}
var nums = [13,17,23,71];
var KennyRogers = new Gambler(nums);
writeln(KennyRogers);
这是我需要在 Chapel 中重新创建的类似 Python 的图案。
class Gambler {
var luckyNumbers: [1..0] int;
}
var nums = [13,17,23,71];
var KennyRogers = new Gambler();
KennyRogers.luckyNumbers = for n in nums do n;
writeln(KennyRogers);
产生 运行 时间错误
Kenny.chpl:8: error: zippered iterations have non-equal lengths
我不知道Kenny提前会有多少个幸运数字,那时我无法实例化Kenny。也就是说,我必须稍后分配它们。另外,我需要知道什么时候持有它们,知道什么时候折叠它们。
这是array.push_back
方法的一个很好的应用。要一次插入一个幸运数字,您可以这样做:
for n in nums do
KennyRogers.luckyNumbers.push_back(n);
您还可以在单个 push_back
操作中插入整个数组:
KennyRogers.luckyNumbers.push_back(nums);
还有 push_front
和 insert
方法,以防您需要将元素放在数组的前面或任意位置。
我认为我无法帮助确定何时持有或何时弃牌。
解决这个问题的一种方法是在 Gambler
的初始值设定项中建立 luckyNumbers
,从一开始就使事情的大小正确并避免 resizing/rewriting 数组。为了在不调整大小的情况下执行此操作,您需要声明数组的域并将其也设置在初始化程序中:
class Gambler {
const D: domain(1); // a 1D domain field representing the array's size
var luckyNumbers: [D] int; // declare lucky numbers in terms of that domain
proc init(nums: [?numsD] int) {
D = numsD; // make D a copy of nums's domain; allocates luckyNumbers to the appropriate size
luckyNumbers = nums; // initialize luckyNumbers with nums
super.init(); // mark the initialization of fields as being done
}
}
var nums = [13,17,23,71];
var KennyRogers = new Gambler(nums);
writeln(KennyRogers);