Aad*_*hah 11 javascript enums iterator destructuring ecmascript-6
您可以使用解构分配来定义ES6中的枚举,如下所示:
var [red, green, blue] = [0, 1, 2];
Run Code Online (Sandbox Code Playgroud)
相反,我希望解构分配的右侧是动态的.例如:
var MAX_ENUM_SIZE = 32;
var ENUM = new Array(MAX_ENUM_SIZE);
for (var i = 0; i < MAX_ENUM_SIZE; i++) ENUM[i] = i;
var [red, green, blue] = ENUM;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎是一个黑客.如果我希望将来有更大的枚举怎么办?因此,我正在考虑使用迭代器进行解构赋值,如下所示:
var [red, green, blue] = enumeration(/* I don't want to specify size */);
Run Code Online (Sandbox Code Playgroud)
但是,我不认为可以使用迭代器进行解构赋值[需要引证].有没有办法实现这个目标?
Tha*_*you 11
使用发电机
function* enumerator() {
let i = 0;
while (true) yield i++;
};
let [red,green,blue] = enumerator();
console.log(red, green, blue); // 0 1 2
let [a,b,c,d,e] = enumerator();
console.log(a,b,c,d,e); // 0 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
该生成器非常灵活,可以实现不同类型的枚举 - 例如,这些可爱的位掩码枚举
function* bitmask() {
let i = 0;
while (i < 32) yield 1 << i++;
throw Error("bitmask enumerator exceeds 32 bits");
}
let [R,W,X] = bitmask();
const read = p => (p & R) !== 0;
const write = p => (p & W) !== 0;
const exec = p => (p & X) !== 0;
{
let p = R | W; // read and write only
console.log("can read?", read(p)); // true
console.log("can write?", write(p)); // true
console.log("can exec?", exec(p)); // false
}
{
let p = R | X; // read and execute only
console.log("can read?", read(p)); // true
console.log("can write?", write(p)); // false
console.log("can exec?", exec(p)); // true
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
261 次 |
最近记录: |