[REBOL] Re: DyBASE test
From: moliad:aei:ca at: 30-Dec-2003 0:17
did you know you didn't have to use actual objects to implement object-like behaviour.
this has the effect that you can extend the "object" at will...
just use a block with set-word values.
I have no ideas about speed, just that this could be a solution to your problem
example:
>> object: [
id none
name none
]
>> object/name: "gary"
== [
id none
name "gary"
]
== print object/name
gary
add a new item to object:
>> append object reduce ['field "chester the cat"]
== [
id none
name "gary"
field "chester the cat"
]
>> print object/field
chester the cat
Some gurus on this list might might correct me, but in the context of your problem, this
sounds like a fix to your problem. You can also put functions in such a block and use
it, BUT remember that self word is not set by default, you would have to add it to the
function's arguments (like in python) and supply the block, to which the function is
part of... like this:
object: compose [
id none
name "gary"
field "chester the cat"
status ( func [self][
probe length? self
foreach [item data] self [
either (function! <> type? :data) [
print [item "=" data]
][
print [item "()"]
]
]
])
]
object/id: 1234
object/status object
8
id = 1234
name = gary
field = chester the cat
status ()
HTH!!!
-MAx