Ajouter des trucs à une liste en f#
Je suis en train de faire un projet appelé "Forme 2D de l'éditeur" en f#. J'ai fait ce projet en c# avant, donc j'ai toutes les logiques de comment connecter deux formes. Donc, je sais que j'ai besoin d'une liste de tenir toutes ces formes que je vais être en ajoutant. Mais je ne peux pas obtenir mon addToList méthode de travail.
Mon ShapeList:
let mutable ShapeList:List<RectangleZ> = [RectangleZ(100,100)]
Mon ajouter des méthodes:
let addToList (listan:List<RectangleZ>) (element:RectangleZ) = let ShapeList = ShapeList@[element] in ShapeList
//Method to add into the ShapeList
let addToList (listan:List<RectangleZ>) (element:RectangleZ) = element::ShapeList
//Other try on adding into shapeList
le bouton qui devrait être l'ajout de rectangles aux ShapeList:
btn.Click.Add(fun _ -> new RectangleZ(500, 100) |> addToList ShapeList |>ignore |> saver)
//Button click method that should be adding the RectangleZ(500, 100) to my ShapeList
Et bien sûr mon rectangle:
type RectangleZ(x:int, y:int)=
let mutable thisx = x
let mutable thisy = y
let mutable thiswidth = 50
let mutable thisheight = 20
let brush = new SolidBrush(Color.Black)
member obj.x with get () = thisx and set x = thisx <- x
member obj.y with get () = thisy and set y = thisy <- y
member obj.width with get () = thiswidth and set width = thiswidth <- width
member obj.height with get () = thisheight and set height = thisheight <- height
member obj.thisColor = Color.FromArgb(167, 198, 253)
member obj.draw(paper:Graphics) = paper.FillRectangle(brush, thisx, thisy, 50, 20)
member obj.ShapeType = "Rectangle"
L'élément dosn pas ajouté dans la liste pour une raison quelconque dans aucun de mes addToList fonctions. Ma Question est pourquoi?
OriginalL'auteur Jakob Danielsson | 2012-12-12
Vous devez vous connecter pour publier un commentaire.
Liste en F#, sont immuables. Cela signifie que lorsque vous ajouter un élément à la liste comme ceci:
ancienne liste (queue) n'a pas de changements, au lieu de cette nouvelle liste est créée. Donc, vous avez besoin de retourner à la nouvelle liste à partir de votre
addToList
de la fonction et de la mise à jour mutable variable:Dans votre code
let ShapeList
est locale et n'affecte pas l'effet global ShapeList variable.OriginalL'auteur Lazin
OriginalL'auteur alerya
Vous pouvez utiliser
List.append
avecmutable
listes, l'exemple ci-dessous a bien fonctionné avec moi:OriginalL'auteur Hasan A Yousef