render(line: string): RenderCodeLine | RenderTextLine { if (line.startsWith("```")) { this.result.push(line); return new RenderTextLine(this.result); } else { return this; } } } function RenderText(lines: string): string[] { let render: RenderTextLine | RenderMarkerLine | RenderCodeLine = new RenderTextLine([]); for (let line of lines) { render = render.render(line); } return render.result; }
立即创建和延迟创建
立即创建:立即得到并传递值,即使我们在以后决定丢弃该值
1 2 3 4 5 6 7 8 9 10 11
class Bike {} class Car {} function makeRide(isRunning: boolean, bike: Bike, car: Car): Bike | Car { if (isRunning) { return car; } else { return bike; } } makeRide(false, new Bike(), new Car());
延迟创建:计算是以函数的方式表达的,传递的是函数而非实际的值,所以可以在需要值的时候调用函数
1 2 3 4 5 6 7 8 9 10 11 12 13
class Bike {} class Car {} function makeRide(isRunning: boolean, bike: Bike, car: () => Car): Bike | Car { if (isRunning) { return car(); } else { return bike; } } function makeCar() { return new Car(); } makeRide(false, new Bike(), makeCar);
lambda
使用匿名函数:
1 2 3 4 5 6 7 8 9 10 11
class Bike {} class Car {} function makeRide(isRunning: boolean, bike: Bike, car: () => Car): Bike | Car { if (isRunning) { return car(); } else { return bike; } } makeRide(false, new Bike(), () => new Car());
function map(items, func) { var result = []; for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { var item = items_1[_i]; result.push(func(item)); } return result; }
自制 filter()
1 2 3 4 5 6 7 8 9
function filter<T>(items: T[], func: (item: T) => T[]): T[] { let result: T[] = []; for (const item of items) { if (func(item)) { result.push(item); } } return result; }
自制 reduce()
1 2 3 4 5 6 7
function reduce<T>(items: T[], previous: T, next: (x: T, y: T) => T): T { let result: T = previous; for (const item of items) { result = next(result, item); } return result; }