Add a variable to a class instance at runtime: Difference between revisions

Content added Content deleted
(CoffeeScript)
(Added Bracmat)
Line 70: Line 70:
<lang AutoHotkey>e := {}
<lang AutoHotkey>e := {}
e.foo := 1 </lang>
e.foo := 1 </lang>

=={{header|Bracmat}}==
This solution saves the original members and methods in a variable, using pattern matching. Then, using macro expansion, a new object is created with an additional member variable and also an additional method. Because the new object is assigned to the same variable as the original object, the original object ceases to exist.
<lang>( ( struktuur
= (aMember=) (aMethod=.!(its.aMember))
)
& new$struktuur:?object
& out$"Object as originally created:"
& lst$object
& A value:?(object..aMember)
& !object:(=?originalMembersAndMethods)
& new
$ (
' ( (anotherMember=)
(anotherMethod=.!(its.anotherMember))
()$originalMembersAndMethods
)
)
: ?object
& out
$ "
Object with additional member and method and with 'aMember' already set to some interesting value:"
& lst$object
& some other value:?(object..anotherMember)
& out$"
Call both methods and output their return values."
& out$("aMember contains:" (object..aMethod)$)
& out$("anotherMember contains:" (object..anotherMethod)$)
&);</lang>
Output:
<lang>Object as originally created:
(object=
=(aMember=) (aMethod=.!(its.aMember)));

Object with additional member and method and with 'aMember' already set to some interesting value:
(object=

= (anotherMember=)
(anotherMethod=.!(its.anotherMember))
(aMember=A value)
(aMethod=.!(its.aMember)));

Call both methods and output their return values.
aMember contains: A value
anotherMember contains: some other value</lang>


=={{header|CoffeeScript}}==
=={{header|CoffeeScript}}==