ç®åæ¥è¯´, 模å¼å¹é
æä¾ä¸ä¸ªæ¹ä¾¿ç解æ(Destructuring)æ°æ®ç»æçæ¹å¼, èä¸æé è·è§£æçè¯æ³æ¯ç±»ä¼¼(çè³ç¸å)çå¯ä»¥å 强è¯è¨çä¸è´æ§.
以è¯æ³åä¼ ç»çCæ¯è¾ç¸è¿çRust为ä¾
struct Point {
x: i32,
y: i32,
}
let origin = Point { x: 0, y: 0 };
//^^^^^^^^æé ^^^^^^^^^
match origin {
Point { x: x, y: y } => println!("({},{})", x, y),
//^^^^^^^^解æ^^^^^^^^^
}
via Patterns
ä½æ¯è§£ææ°æ®ç»æé½ç¨æ¨¡å¼å¹é
ä¹æä¸æ¹ä¾¿çå°æ¹, å½æ°æ®ç»ææ¯è¾"æµ
"çæ¶å, 模å¼å¹é
è¿æ¯æ¯è¾å¥½ç¨, å°±åä¸é¢çä¾åä¸æ ·, ä½æ¯å½æ°æ®ç»ææ¯è¾"æ·±"çæ¶å, *åªæ*模å¼å¹é
çè¯è¨åget/setæä½å°±ç¥éº»ç¦
data Person = P { name :: String
, addr :: Address
}
data Address = A { street :: String
, city :: String
, postcode :: String
}
setPostcode :: String -> Person -> Person
setPostcode pc p = p { addr = addr p { postcode = pc }}
via
https://notepad.mmakowski.com/Tech/Haskell%20Exchange%202013å 为postcodeè¿ä¸ªæåèå¾æ¯è¾æ·±, æ³ä¸æ¬¡è¿set postcode, åç解æ次æ°ä¼å¾å¤, å®é
ä¸è¯å®ä¼åå¨è¿ç§æ
åµ, æ³ä¸ä¸åç§ä¸å±åµä¸å±çJSON. å
¶ä¸ä¸ä¸ªè§£å³æ¹æ³å°±æ¯ç¨ä¸ä¸ªä¸é´åéå
æaddressæ¿åºæ¥, åæ¿postcode. è¿å°±å¤±å»äº @èå å¨è¯è®ºæå°çå¯ä»¥åå°ä¸é´åéç便å©.
å¦æè½åOOç¨"."æ¥è®¿é®: person.address.postcode = newPostcode , ä¸æ¯æ´å æ¹ä¾¿?
æ·±å
¥ä¸å»å离é¢ç®è®¨è®ºçå
容, å
³äº"."çè¯å¯ä»¥çErik Merijerç The essence of data access in cÏ: The power is in the dot.
Haskell对è¿ä¸ªé®é¢ç解å³åæ³æ¯lens: Lenses, Folds and Traversalsè¿ä¸ªåº, è¿æ¯ä¸ªç®åçä»ç»
https://gist.github.com/patrickt/d43031e3b69f1a4ff8c9 , è®°ä½, åä¸ä¸è¦çå®ç°, åä¸ä¸è¦!