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

aしたがって、 で値にアクセスできますa 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 に答える