classes.tuple: adding set-slots and from-slots.
							parent
							
								
									b9b5c6e927
								
							
						
					
					
						commit
						81a894f05f
					
				| 
						 | 
				
			
			@ -460,3 +460,11 @@ HELP: get-slot-named
 | 
			
		|||
HELP: set-slot-named
 | 
			
		||||
{ $values { "value" object } { "name" string } { "tuple" tuple } }
 | 
			
		||||
{ $description "Stores the " { $snippet "value" } " into a tuple slot accessed by " { $snippet "name" } "." } ;
 | 
			
		||||
 | 
			
		||||
HELP: set-slots
 | 
			
		||||
{ $values { "assoc" assoc } { "tuple" tuple } }
 | 
			
		||||
{ $description "For each " { $snippet "{ key value }" } " pair in " { $snippet "assoc" } ", sets the " { $snippet "key" } " slot in " { $snippet "obj" } " to " { $snippet "value" } "." } ;
 | 
			
		||||
 | 
			
		||||
HELP: from-slots
 | 
			
		||||
{ $values { "assoc" assoc } { "class" tuple-class } { "tuple" tuple } }
 | 
			
		||||
{ $description "Creates a new instance of " { $snippet "class" } " with slot values specified by " { $snippet "assoc" } "." } ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,6 +59,12 @@ TUPLE: point x y ;
 | 
			
		|||
[ 200 ] [ "p" get y>> ] unit-test
 | 
			
		||||
[ 300 ] [ "p" get "z>>" "accessors" lookup-word execute ] unit-test
 | 
			
		||||
 | 
			
		||||
TUPLE: slotty a b c ;
 | 
			
		||||
 | 
			
		||||
[ T{ slotty } ] [ H{ } slotty from-slots ] unit-test
 | 
			
		||||
[ T{ slotty f 1 2 f } ] [ H{ { "a" 1 } { "b" 2 } } slotty from-slots ] unit-test
 | 
			
		||||
[ H{ { "d" 0 } } slotty new set-slots ] must-fail
 | 
			
		||||
 | 
			
		||||
TUPLE: predicate-test ;
 | 
			
		||||
 | 
			
		||||
C: <predicate-test> predicate-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,12 @@ ERROR: no-slot name tuple ;
 | 
			
		|||
: set-slot-named ( value name tuple -- )
 | 
			
		||||
    [ nip ] [ offset-of-slot ] 2bi set-slot ;
 | 
			
		||||
 | 
			
		||||
: set-slots ( assoc tuple -- )
 | 
			
		||||
    [ swapd set-slot-named ] curry assoc-each ; inline
 | 
			
		||||
 | 
			
		||||
: from-slots ( assoc class -- tuple )
 | 
			
		||||
    new [ set-slots ] keep ; inline
 | 
			
		||||
 | 
			
		||||
PREDICATE: immutable-tuple-class < tuple-class
 | 
			
		||||
    all-slots [ read-only>> ] all? ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue