Call an object method: Difference between revisions
Content added Content deleted
Puppydrum64 (talk | contribs) m (omit from assembly) |
(→{{header|Haskell}}: added solution) |
||
Line 650: | Line 650: | ||
L := [cp1] |
L := [cp1] |
||
end</lang> |
end</lang> |
||
=={{header|Haskell}}== |
|||
Haskell doesn't have objects in OOP sence (i.e. first-class sitizens |
|||
appearing in runtime with incapsulated state and ability to send messages (methods) to other objects). |
|||
Haskell has first-class immutable records with fields of any type, representing abstraction and incapsulation (due to purity). |
|||
Polymorphism is implemented via type-classes, which are similar to OOP interfaces. |
|||
Dummy example: |
|||
<lang haskell>data Obj = Obj { field :: Int, method :: Int -> Int } |
|||
-- smart constructor |
|||
mkAdder :: Int -> Obj |
|||
mkAdder x = Obj x (+x) |
|||
-- adding method from a type class |
|||
instanse Show Obj where |
|||
show o = "Obj " ++ show (field o) </lang> |
|||
<pre>*Main> let o1 = Obj 1 (*5) |
|||
*Main> field o1 |
|||
1 |
|||
*Main> method o1 6 |
|||
30 |
|||
*Main> show o1 |
|||
Obj 1 |
|||
*Main> let o2 = mkAdder 5 |
|||
*Main> field o2 |
|||
5 |
|||
*Main> method o2 6 |
|||
11 |
|||
*Main> show o2 |
|||
Obj 5</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |