gpt4 book ai didi

Haskell:更喜欢模式匹配还是成员访问?

转载 作者:行者123 更新时间:2023-12-03 23:15:04 27 4
gpt4 key购买 nike

假设我有一个 Vector数据类型定义如下:

data Vector = Vector { x :: Double
, y :: Double
, z :: Double
}

使用成员访问来定义函数是否更常见:
vecAddA v w
= Vector (x v + x w)
(y v + y w)
(z v + z w)

或使用模式匹配:
vecAddB (Vector vx vy vz) (Vector wx wy wz)
= Vector (vx + wx)
(vy + wy)
(vz + wz)

(抱歉,如果我有任何不正确的术语)。

最佳答案

我通常会使用模式匹配,特别是因为您使用了所有构造函数的参数并且它们并不多。此外,在此示例中,这不是问题,但请考虑以下事项:

data Foo = A {a :: Int} | B {b :: String}

fun x = a x + 1

如果您使用模式匹配来处理 Foo 类型,那么您是安全的;无法访问不存在的成员。另一方面,如果使用访问器函数,一些操作,例如调用 fun (B "hi!")这里会导致运行时错误。

编辑:虽然很可能忘记在某些构造函数上进行匹配,但模式匹配非常明确地表明发生的情况取决于使用的构造函数(您也可以告诉编译器检测不完整的模式并警告您)而使用一个函数的提示比任何构造函数都要多,IMO。

访问器最好保存在您只想获取构造函数的一个或几个(可能很多)参数并且您知道使用它们是安全的情况下(没有在错误构造函数上使用访问器的风险,如示例.)

关于Haskell:更喜欢模式匹配还是成员访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com