2012-05-16 30 views
1

Haskell(使用ghc)是否有任何方式直接使用數據類型的值而不使用模式匹配類似於面向對象的編程語言(例如obj.a或obj-> a)?使用沒有模式匹配的數據類型的值

我尋找的東西是這樣的:

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

some :: Obj -> Int 
some o = o.a 
+1

「不使用類似於面向對象的編程語言中的模式匹配」 - 好吧,消息分派是模式匹配的一種形式,不是嗎?這在Erlang中最爲明顯,但Smalltalk也是如此。 –

回答

2

是的,你已經一半。通過使用記錄語法,你自動創建功能

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

所以,你可以用a myObject訪問a值。

但是,正如你所看到的,它可以歸結爲模式匹配。

3

你可以得到的最接近的是Haskell的記錄,它看起來像這樣:

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

它會自動給你的功能:

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

可以稱之爲像普通函數(類型註釋爲清晰起見):

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

Learn you a Haskell有一個好關於他們的章節。

1

RecordWildCards語言擴展也很有幫助。

{-# LANGUAGE RecordWildCards #-} 

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

some :: Obj -> Int 
some Obj{..} = a + b