Add a variable to a class instance at runtime: Difference between revisions
Content added Content deleted
(Added Wren) |
|||
Line 1,818: | Line 1,818: | ||
% $s2 value time |
% $s2 value time |
||
can't read "time": no such variable</lang> |
can't read "time": no such variable</lang> |
||
=={{header|Wren}}== |
|||
Although Wren is dynamically typed, it is not possible to add new variables (or fields as we prefer to call them) to a class at run time. We therefore follow the example of some of the other languages here and use a map field instead. |
|||
<lang ecmascript>import "io" for Stdin, Stdout |
|||
class Birds { |
|||
construct new(userFields) { |
|||
_userFields = userFields |
|||
} |
|||
userFields { _userFields } |
|||
} |
|||
var userFields = {} |
|||
System.print("Enter three fields to add to the Birds class:") |
|||
for (i in 0..2) { |
|||
System.write("\n name : ") |
|||
Stdout.flush() |
|||
var name = Stdin.readLine() |
|||
System.write(" value: ") |
|||
Stdout.flush() |
|||
var value = Num.fromString(Stdin.readLine()) |
|||
userFields[name] = value |
|||
} |
|||
var birds = Birds.new(userFields) |
|||
System.print("\nYour fields are:\n") |
|||
for (kv in birds.userFields) { |
|||
System.print(" %(kv.key) = %(kv.value)") |
|||
}</lang> |
|||
{{out}} |
|||
Sample session: |
|||
<pre> |
|||
Enter three fields to add to the Birds class: |
|||
name : finch |
|||
value: 6 |
|||
name : magpie |
|||
value: 7 |
|||
name : wren |
|||
value: 8 |
|||
Your fields are: |
|||
finch = 6 |
|||
magpie = 7 |
|||
wren = 8 |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |