Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] (no subject)

From: agem:crosswinds at: 24-Feb-2001 7:27

[rebol [ title: "proposal for passing refinements" comment: { hi all, i suggest following syntax: [ a-func/opt/:bool 123 ] where opt and its arguments are passed if 'bool is true. a sample implementation is presented here, which may be used in the way [do refined[ a-func/opt/:bool 123 ]] note this handles passing arguments .. an inbuild syntax would be preferable.. also i suggest using [ a-func/'opt 123 ] if 'opt and 'bool are the same name. not implemented yet. would be nice if you test a bit more, baby is 1:30 old yet :) } author: "volker" ] refined: func [block /local val in-args part-args length-part-args option append-part count-part-args func-args rfunc options out-path out-args in-path ] [ in-path: to block! first block in-args: next block out-args: copy [] out-path: reduce [first :in-path] options: next in-path rfunc: get first in-path func-args: first :rfunc ;handle normal arguments parse func-args [copy normal-args to refinement!] append out-args copy/part in-args length? normal-args in-args: skip in-args length? normal-args ;handle options count-part-args: func [func-args option /part-args] [ option: to refinement! option parse func-args [thru option copy part-args [to refinement! | to end]] either part-args [length? part-args] [0] ] append-part: does [ append out-path option append out-args part-args ] parse next :in-path [any [ set option word! ( length-part-args: count-part-args func-args option part-args: copy/part in-args length-part-args in-args: skip in-args length-part-args ) [ set val get-word! ( if get val [append-part] ) | ( append-part ) ] ]] append reduce [to path! out-path] out-args ] do example: [ a: func [p1 p2 /opt o1 /opt2 o2 /opt3] [? p1 ? p2 ? o1 ? o2] source a b: none e: true raw-call: [a/opt/:b/opt2/opt3/:e 123 234 345 456 567] ? b ? e ? raw-call refined-call: refined raw-call ? refined-call print "do it" do refined-call ] ]