Nested Closure を用いることで、スコープの限定と評価順序の制御ができるようになる。
Nested Function:
processor( cores 2, i386 )
Function Sequence + Closure: (1)
processor do cores 2 i386 end
Method Chaining + Closure:
processor do |p| p.cores(2).i386 end
Function Sequence + Closure: (2)
processor do |p| p.cores 2 p.i386 end
aRoom ifDark: [aLight on] ifLight: [aLight off]
もともとの Function Sequence
class BasicComputerBuilder < ComputerBuilder def doBuild computer processor cores 2 i386 processorSpeed 2.2 disk size 150 disk size 75 diskSpeed 7200 sata end end
Rubyの場合
class BasicComputerBuilder < ComputerBuilder def doBuild computer do processor do cores 2 i386 processorSpeed 2.2 end disk do size 150 end disk do size 75 diskSpeed 7200 sata end end end end
C#の場合
class Script : Builder { protected override void doBuild() { computer(() => { processor(() => { cores(2); i386(); processorSpeed(2.2); }); disk(() => { size(150); }); disk(() => { size(75); diskSpeed(7200); sata(); }); }); } }
ComputerBuilder.build do |c| c. processor do |p| p.cores(2). i386. speed(2.2) end. disk do |d| d.size 150 end. disk do |d| d.size(75). speed(7200). sata end end