RPGゲームのインベントリシステムを定義する際に、私は奇妙な問題に遭遇しました。それで、私がやっていることは、プレーヤーが店から手に入れるアイテムを追加することです。追加している間、私は重量制限を超えないようにして、アイテムが既に袋に入っていればアイテムの数量を増やします。そうしないとアイテムを明示的に追加します。IntelliSensは、不変の値を更新中にタイププロパティを検出しません。
これまでのところ、これは非常にうまくいきました。私の問題は、抽象クラスを更新しているときに、IntelliSensが私が使用しているタイプのプロパティ定義を持っていないことを教えようとします。実際には、抽象クラスのプロパティを見つけることはできません。悪い間違いかもしれませんが、私はかなり長い間、これを頭で掻いてきました。私はいくつかのサポートをしたいと思います!
UPDATE
はここにコンパイルエラーになります:型 'InventoryItem' フィールドが含まれていません '数量' .. \ InventoryItems.fs 188
[<AbstractClass>]
type InventoryItem() =
abstract member ItemName : string
abstract member ItemDescription : string
abstract member ItemWeight : float<kg>
abstract member ItemPrice : float<usd>
abstract member Quantity : int with get, set
let makeBagItemsDistinct (bag: InventoryItem array) =
bag |> Seq.distinct |> Seq.toArray
type Inventory = {
Bag : InventoryItem array
Weight: float<kg>
}
with
member x.addItem (ii: InventoryItem): Inventory =
if x.Weight >= MaxWeight <> true then x
elif (x.Weight + ii.ItemWeight) >= MaxWeight then x
else
let oItemIndex = x.Bag |> Array.tryFindIndex(fun x -> x = ii)
match oItemIndex with
| Some index ->
// There already an item of this type in the bag
let item = x.Bag |> Array.find(fun x -> x = ii)
let newBag =
x.Bag
|> Array.filter((<>) item)
|> Array.append [| { item with Quantity = item.Quantity +ii.Quantity |]
|> makeBagItemsDistinct
let inventory = { x with Bag = newBag }
{ inventory with Weight = inventory.Weight + item.ItemWeight }
| None ->
let newBag = x.Bag |> Array.append [|ii|] |> makeBagItemsDistinct
let inventory = { x with Bag = newBag }
{ inventory with Weight = inventory.Weight + ii.ItemWeight }
まず、字下げが見えます。修正してください。第2に、どのようなエラーが発生しているのか、どこで、いつ、それともそうでなければ「それは機能していない」ことをどのように知っているのかを説明してください。 –
私はいくつかの変更を加えました@FyodorSoikin。前述のように、コンパイラはInventoryItem抽象クラス内にQuantityフィールドを表示していないようです –
インデントがまだオフです。そして、「見えない」とは、問題の説明ではありません。 –