當前位置:編程學習大全網 - 編程語言 - 為什麽諸多編程語言都將模式匹配作為重要構成

為什麽諸多編程語言都將模式匹配作為重要構成

簡單來說, 模式匹配提供壹個方便的解構(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 /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這個庫, 這是個簡單的介紹 /patrickt/d43031e3b69f1a4ff8c9 , 記住, 千萬不要看實現, 千萬不要!

  • 上一篇:歐姆龍E3X-HD10光纖放大器的調整
  • 下一篇:計算機技術人員個人年度總結5篇
  • copyright 2024編程學習大全網