在 Haskell(使用 ghc)中有什么方法可以直接使用数据类型的值,而不像在面向对象的编程语言(例如 obj.a 或 obj->a)中那样使用模式匹配?
我正在寻找这样的东西:
data Obj = Obj {a :: Int, b :: Int}
some :: Obj -> Int
some o = o.a
在 Haskell(使用 ghc)中有什么方法可以直接使用数据类型的值,而不像在面向对象的编程语言(例如 obj.a 或 obj->a)中那样使用模式匹配?
我正在寻找这样的东西:
data Obj = Obj {a :: Int, b :: Int}
some :: Obj -> Int
some o = o.a
您可以获得的最接近的是 Haskell 的记录,如下所示:
data Obj = Obj {a :: Int, b :: Int}
这将自动为您提供以下功能:
a :: Obj -> Int
b :: Obj -> Int
可以像普通函数一样调用(为清楚起见,键入注释):
(a (o :: Obj)) :: Int
了解你一个 Haskell有一个很好的章节。
是的,你已经成功了一半。通过使用记录语法,您已经自动创建了函数
a (Obj x _) = x
b (Obj _ x) = x
因此,您可以使用 访问该a
值a myObject
。
但是,是的,正如您所看到的,它确实归结为模式匹配。
RecordWildCards
语言扩展也很有帮助。
{-# LANGUAGE RecordWildCards #-}
data Obj = Obj {a :: Int, b :: Int}
some :: Obj -> Int
some Obj{..} = a + b