Jump to content

Constrained genericity: Difference between revisions

Added PicoLisp
(→‎{{header|Scala}}: ++ sather, hopefully I've taken it right)
(Added PicoLisp)
Line 316:
let your_box = FloatBox.make_box_from_list [2.3; 4.5]</lang>
Unfortunately, it is kind of cumbersome in that, for every type parameter we want to use for this generic type, we will have to explicitly create a module for the resulting type (i.e. <tt>BananaBox</tt>, <tt>FloatBox</tt>). And the operations on that resulting type (i.e. <tt>make_box_from_list</tt>) are tied to each specific module.
 
=={{header|PicoLisp}}==
<lang PicoLisp>(class +Eatable)
 
(dm eat> ()
(prinl "I'm eatable") )
 
 
(class +FoodBox)
# obj
 
(dm set> (Obj)
(unless (method 'eat> Obj) # Check if the object is eatable
(quit "Object is not eatable" Obj) )
(=: obj Obj) ) # If so, set the object
 
 
(let (Box (new '(+FoodBox)) Eat (new '(+Eatable)) NoEat (new '(+Bla)))
(set> Box Eat) # Works
(set> Box NoEat) ) # Gives an error</lang>
Output:
<pre>$384320489 -- Object is not eatable
 
? (show Box)
$384320487 (+FoodBox)
obj $384320488
 
? (show Box 'obj)
$384320488 (+Eatable)
 
? (show NoEat)
$384320489 (+Bla)</pre>
 
=={{header|Sather}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.