【发布时间】:2022-04-04 03:53:59
【问题描述】:
我正在尝试使用 Eiffel 实现生产者-消费者问题的解决方案。我有一个 p 类 PRODUCER 和一个数组 c 类 CONSUMER 声明和初始化如下:
local
p : attached ARRAY[PRODUCER]
c : attached ARRAY[CONSUMER]
do
!!p.make(1, 5)
!!c.make(1, 5)
但是当我尝试访问数组的其中一个组件(如p.at(i).somefeature())中的功能时,它会给出一个运行时异常,说Feature call on void target。
关于如何解决这个问题的任何想法?是因为我没有为数组的各个组件调用创建过程吗?或者创建数组的方法是否存在基本缺陷?谢谢。
我认为问题的发生是因为作为引用类型的数组的各个组件(在本例中为生产者或消费者)被初始化为 void。建议的解决方案是使用make_filled(default_value:T;low,high:INTEGER;),其中T 是复杂类型。以字符串数组为例
string_list : ARRAY[STRING]
string_list.make_filled(" ", low, high)
导致string_list 的每个元素被初始化为一个空白字符串。关于如何为PRODUCER 类提供默认值的任何帮助?谢谢
我想我找到了解决问题的方法。我只需要创建PRODUCER 和CONSUMER 的实例,并在make_filled 的默认值中使用它们。然后我可以操作p[i] 和c[i]。
这不是一个超级有效的方法,所以如果有更好的解决方案,请分享。谢谢。
【问题讨论】:
标签: eiffel