1

在 Haskell(使用 ghc)中有什么方法可以直接使用数据类型的值,而不像在面向对象的编程语言(例如 obj.a 或 obj->a)中那样使用模式匹配?

我正在寻找这样的东西:

data Obj = Obj {a :: Int, b :: Int}

some :: Obj -> Int
some o = o.a
4

3 回答 3

3

您可以获得的最接近的是 Haskell 的记录,如下所示:

data Obj = Obj {a :: Int, b :: Int}

这将自动为您提供以下功能:

a :: Obj -> Int
b :: Obj -> Int

可以像普通函数一样调用(为清楚起见,键入注释):

(a (o :: Obj)) :: Int

了解你一个 Haskell有一个很好的章节。

于 2012-05-16T21:46:19.080 回答
2

是的,你已经成功了一半。通过使用记录语法,您已经自动创建了函数

a (Obj x _) = x
b (Obj _ x) = x

因此,您可以使用 访问该aa myObject

但是,是的,正如您所看到的,它确实归结为模式匹配。

于 2012-05-16T21:41:38.210 回答
1

RecordWildCards语言扩展也很有帮助。

{-# LANGUAGE RecordWildCards #-}

data Obj = Obj {a :: Int, b :: Int}

some :: Obj -> Int
some Obj{..} = a + b
于 2012-05-16T21:50:44.587 回答