Category talk:Wren-dynamic: Difference between revisions

Enums can now start from any integral value, not just 0.
(Enums can now start from any integral value, not just 0.)
Line 5:
This module aims to rectify this by providing templates to generate such classes at runtime for simple cases. In particular:
 
* Enum values always start atfrom an initial integer value (often 0) and are incremented by 1 which is the commonest case.
* 'Flags' enums are always powers of 2, starting from 1 (= 2^0).
* Structs and tuples both represent data classes but fields for the former are read/write and for the latter read only.
Line 27:
 
/* Enum creates an enum with any number of read-only static members.
Members are assigned in order an initial integer value starting from(often 0), and increasingincremented by 1 each time.
The enum has:
1. static property getters for each member, and
Line 35:
// Creates a class for the Enum (with an underscore after the name) and
// returns a reference to it.
static create(name, members, start) {
if (name.type != String || name == "") Fiber.abort("Name must be a non-empty string.")
if (members.isEmpty) Fiber.abort("An enum must have at least one member.")
if (start.type != Num || !start.isInteger) Fiber.abort("Start must be an integer.")
name = name + "_"
var s = "class %(name) {\n"
for (i in 0...members.count) {
var m = members[i]
s = s + " static %(m) { %(i + start) }\n"
}
var mems = members.map { |m| "\"%(m)\"" }.join(", ")
Line 49 ⟶ 50:
return Meta.compile(s).call()
}
 
// Convenience version of above method which always starts from 0.
static create(name, members) { create(name, members, 0) }
}
 
9,476

edits