Haskell程式:將基本型別轉換為物件
在Haskell中,我們將使用訪問器函式、建構函式和記錄語法將基本型別轉換為物件。在第一個例子中,我們將使用(getName person = name person),在第二個例子中,我們將使用(getName (Person name _) = name 和 getAge (Person _ age) = age)。在第三個例子中,我們將使用記錄語法。
演算法
步驟1 - 定義具有兩個欄位(名稱和年齡)的“Person”資料型別。
步驟2 - 定義getName函式。
步驟3 - 程式執行將從main函式開始。main()函式控制整個程式。它寫成 main = do。
步驟4 - 使用建構函式初始化名為“p”的物件,包含名稱和年齡。
步驟5 - 呼叫函式後,使用‘putStrLn’語句將Person物件的名稱和年齡列印到控制檯。
示例1
在這個例子中,我們定義了一個Person資料型別,它有兩個欄位:型別為String的name和型別為Int的age。我們還定義了一個getName函式,它接受一個Person物件並返回其name欄位。
data Person = Person { name :: String, age :: Int } getName :: Person -> String getName person = name person main :: IO () main = do let p = Person { name = "Alice", age = 30 } putStrLn $ "Name: " ++ getName p putStrLn $ "Age: " ++ show (age p)
輸出
Name: Alice Age: 30
示例2
在這個例子中,我們使用一個建構函式定義了一個Person資料型別,該建構函式接受兩個引數:一個表示人名的String和一個表示其年齡的Int。
data Person = Person String Int getName :: Person -> String getName (Person name _) = name getAge :: Person -> Int getAge (Person _ age) = age main :: IO () main = do let p = Person "Alice" 30 putStrLn $ "Name: " ++ getName p putStrLn $ "Age: " ++ show (getAge p)
輸出
Name: Alice Age: 30
示例3
在這個例子中,我們定義了一個Person資料型別,它有兩個欄位:型別為String的getName和型別為Int的getAge。getName和getAge欄位使用記錄語法定義,該語法會自動生成與欄位名稱相同的訪問器函式。
data Person = Person { getName :: String, getAge :: Int } main :: IO () main = do let p = Person { getName = "Alice", getAge = 30 } putStrLn $ "Name: " ++ getName p putStrLn $ "Age: " ++ show (getAge p)
輸出
Name: Alice Age: 30
結論
在Haskell中,像Int、Double和Bool這樣的基本型別表示為值而不是物件。但是,可以建立包裝這些基本型別並透過方法提供附加功能的自定義資料型別。在Haskell中,我們可以使用訪問器函式、建構函式和記錄語法進行此類轉換。