w JavaScripcie, można uzyskać dostęp do wszelkich właściwości obiektu z prostym pętli następującoprzelotowego F Rekord # jak JavaScript Object
var myObj = {x:1, y:2};
var i, sum=0;
for(i in myObj) sum = sum + myObj[i];
Zastanawiam się, czy mogę zrobić coś podobnego z F #.
type MyObj = {x:int; y:int}
let myObj = {x=1; y=2}
let allValues:seq<int> = allPropertyValuesIn myObj //How do I implement allPropertyValuesIn
let sum = allValues |> Seq.fold (+) 0
Dziękuję za wejście
Edycja, aby wyjaśnić, dlaczego chcę zrobić czegoś takiego
pracuję nad generatorem pliku XML. Dane wejściowe są wierszami odczytanymi z bazy danych, a xsd jest predefiniowany.
Powiedzmy, że mam element "Produkt", który musi zostać wygenerowany iw zależności od reguły biznesowej, w produkcie może być 200 elementów podrzędnych, niektóre są wymagane, inne są opcjonalne. W następstwie doradztwa z this excellent blog miałem moje pierwsze (bardzo szorstki) projekt dla rekordu produktu:
1. type Product{ Price:Money; Name:Name; FactoryLocation:Address option ... }
2. let product = {Price = Money(1.5); Name = Name ("Joe Tooth Paste"); ... }
3. let child1 = createEl ("Price", product.Price)
..
203. let allChildren = child1
::child2
::child3
..
::[]
404. let prodctEl = createElWithCildren ("Product", allChildren)
Jest to bardzo uciążliwe i un-zwięzłe. Musi istnieć lepszy sposób na zrobienie tego w F #. Nie jestem też zbytnim krewnym w idei refleksji.
Czy są inne podejścia lub po prostu robię to źle?
Jest to możliwe dzięki refleksji, ale nie sądzę, że istnieje szybka, bezpieczna alternatywa. –
"Edytuj, aby wyjaśnić, dlaczego ..." Twój problem bardzo się zmienił:/jeśli chcesz zautomatyzować strukturę dziecka, musisz ZNORMALIZOWAĆ strukturę swojego dziecka (twoja struktura dziecka). – josejuan