私はEiffelを使用して生産者/消費者問題の解決策を実装しようとしています。クラスPRODUCERの配列pとクラスCONSUMERの配列cが次のように宣言され、初期化されています。
local
p:attached ARRAY[PRODUCER]
c:attached ARRAY[CONSUMER]
do
!!p.make(1,5)
!!c.make(1,5)
しかし、配列のコンポーネントの1つ(p.at(i).somefeature()など)の機能にアクセスしようとすると、「voidターゲットでの機能呼び出し」という実行時例外が発生します。
これを解決する方法について何かアイデアはありますか?配列の個々のコンポーネントの作成プロシージャを呼び出していないためですか?または、アレイを作成するアプローチに基本的な欠陥がありますか?ありがとう。
参照型である配列の個々のコンポーネント(この場合はプロデューサーまたはコンシューマー)が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]を操作できます。
これは非常に効率的な方法ではないため、より良い解決策がある場合は、それを共有してください。ありがとう。