Home   Archive   Permalink



What does copy/types do?

I tried
    
copy/deep/types block string!
    
But it still copies all values in the block, whether they are strings or not. I am wondering how does copy/types work?

posted by:   rex     10-Feb-2014/6:55:45-8:00



That refinement doesn't exist in R2, and doesn't appear to be implemented in R3 (at least not in the current Saphirion release or the versions published at http://www.rebolsource.net/).
    
Try this:
    
R E B O L []
remove-type: func [lst my-type] [
     foreach item lst [
         if block! = (type? item) [remove-type item my-type]
         repeat i (length? lst) [if my-type = type? pick lst i [remove at lst i]]
     ]    
]
x: [12 "ads" 343 "sodf" $12.23 [123 4343 "sdadfdf" "idsf" 2-feb-2014 ["asdafdf" "sduf" 25 23]]]
y: copy/deep x
z: copy/deep x
remove-type y string!
remove-type z integer!
probe y
probe z
halt

posted by:   Nick     10-Feb-2014/20:11:37-8:00



Added that one to Rebol.org :)

posted by:   Nick     10-Feb-2014/21:48:39-8:00



Thanks Nick.
Now I know how to define my own copy-types function :)

posted by:   Rex     11-Feb-2014/6:37:21-8:00



I find a R3 function which do similar things:
to remove all email address from a block:
    
remove-each value block [email? value]

posted by:   Rex     14-Feb-2014/8:14:35-8:00



'remove-each is also found in all versions of R2, but it will not remove items from nested blocks. Try the example above:
    
x: [12 "ads" 343 "sodf" $12.23 [123 4343 "sdadfdf" "idsf" 2-feb-2014 ["asdafdf" "sduf" 25 23]]]
y: copy/deep x
remove-each val y [string? val]
    
The point of the 'remove-type function above is that it recursively searches through any number and/or level of sub-blocks in a given block, and performs the evaluation and series alteration within all nested blocks, no matter how many levels deep.

posted by:   Nick     14-Feb-2014/22:00-8:00



Oh I see :) A recursion is needed to handle the nested blocks.

posted by:   Rex     16-Feb-2014/6:54:37-8:00