所以我有一个教堂问题,我似乎无法弄清楚。我有一个可以设置大小的队列。唯一的问题是它正在设置大小并用一堆 0 填充队列(这是有道理的)。我试图用空值而不是数值填充队列,所以稍后当我处理 add 方法时,我可以检查队列是否为空。我附上了一张图片,说明一切是如何设置的。让我知道你们是否有任何指导或想法。我得到的错误是:
错误:从字符串到 int(64) 的赋值类型不匹配
我一定是在这里做错了。
所以我有一个教堂问题,我似乎无法弄清楚。我有一个可以设置大小的队列。唯一的问题是它正在设置大小并用一堆 0 填充队列(这是有道理的)。我试图用空值而不是数值填充队列,所以稍后当我处理 add 方法时,我可以检查队列是否为空。我附上了一张图片,说明一切是如何设置的。让我知道你们是否有任何指导或想法。我得到的错误是:
错误:从字符串到 int(64) 的赋值类型不匹配
我一定是在这里做错了。
您看到的错误与该行有关:
elements[i] = 'nil';
'nil'
是一个字符串,而不是 nil 值,它被写成nil
没有任何引号。将字符串分配给 int(64) 数组中的插槽不起作用,因此编译器会发出错误。
但是,在 Chapel 中,只有类可以具有 nil 值,因此您需要使用不同的方式来跟踪elements
数组中的哪些位置被填充。
一种方法是向您的类添加两个新整数,以跟踪包含有效值的第一个和最后一个位置。当您向队列添加值时,last
位置会增加,而当您删除值时,first
位置会增加。当这些值中的任何一个通过数组的末尾时,它就会回到前面。如果有last
捕获first
,则数组已满。如果有first
捕获last
,则数组为空。
我认为应该在您的代码中更正的其他一些事情是:
use semaphore.chpl;
使用语句适用于模块名称,而不是文件名,所以这应该是use semaphore;
.
如果我在这里理解您的意图,则此代码正在尝试将elements
数组的大小设置为 5。
var elementsDomain: domain(1);
var elements: [elementsDomain] eltType = 5;
数组的域控制着数组的大小,所以设置数组大小的方式是通过域:
var elementsDomain: domain(1) = {0..#5};
var elements: [elementsDomain] eltType;
elementsDomain = (0..capacity - 1);
设置elementsDomain
为范围文字值。这是有效的,因为域是一维的,但为了更清楚,您可以将其设置为域文字值:{0..capacity - 1}
.