Beim Definieren eines Inventarsystems für ein RPG-Spiel stieß ich auf ein seltsames Problem. Also, was ich versuche, ist, Dinge hinzuzufügen, die ein Spieler von einem Laden bekommen würde. Während ich hinzufüge, bin ich sicher, dass ich nicht über das Gewichtslimit gehe und die Menge eines Artikels erhöhen würde, wenn es bereits in meiner Inventurtasche wäre, ansonsten werde ich den Artikel einfach hinzufügen.IntelliSens erkennt die Typeigenschaft beim Aktualisieren des Wertwerts nicht
So weit so gut, das sieht ziemlich gesund aus. Mein Problem ist, wenn ich meine abstrakte Klasse aktualisiere, versucht IntelliSens mir zu sagen, dass ich diese Eigenschaft nicht für den Typ definiere, den ich verwende. Tatsächlich kann es nichts von der Eigenschaft der abstrakten Klasse finden. Könnte ein böser Fehler sein, aber ich habe mir schon seit einiger Zeit den Kopf darüber gekratzt und ich hätte gerne Unterstützung!
UPDATE
hier ist der Kompilierung Fehler: Der Typ 'InventoryItem' kein Feld 'Menge' enthält .. \ 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 }
Zuerst sieht Ihr Einzug aus, bitte korrigieren Sie es. Zweitens, bitte erläutern Sie, welchen Fehler Sie bekommen, wo, wann oder auf welche Weise wissen Sie, dass "es nicht funktioniert". –
Ich machte einige Änderungen @FyodorSoikin. Wie bereits erwähnt, scheint der Compiler mein Mengenfeld nicht innerhalb der InventoryItem-abstrakten Klasse zu sehen. –
Ihre Einrückung ist immer noch deaktiviert. Und "scheint nicht zu sehen" ist keine gute Beschreibung eines Problems. –