self@(Cloneable traits) klone [| klone dummy |
klone: Cloneable clone.
dummy: self clone.
self slotNames do: [| :each |
(self delegateNames includes: each) not ifTrue: [
klone addSlot: each valued: (dummy removeSlotNamed: each)]].
klone addDelegate: #traits valued: self].
lobby addSlot: #bankAccount valued: Cloneable clone. "lobby は省略可"
bankAccount addSlot: #dollars valued: 0.
self@bankAccount deposit: x@(Number traits) [self dollars: (self dollars + x)].
"メソッドは総称関数的に定義"
"@ はパラメータ変数の型指定。ちなみに Slate では a Point 生成にはカンマを使う"
self@bankAccount withdraw: x@(Number traits) [self dollars: ((self dollars - x) max: 0)].
bankAccount dollars: 200.
=> 200.
bankAccount deposit: 50.
=> 250
bankAccount withdraw: 100.
=> 150
bankAccount withdraw: 200.
=> 0
addSlot: #myAccount valued: bankAccount klone.
"bankAccount をペアレント(aka プロトタイプ)とするチャイルドの作成"
myAccount dollars.
=> 0 "プロトタイプの同名スロット値と同じ値を持つ"
myAccount dollars: 500.
=> 500
bankAccount dollars.
=> 0 "プロトタイプの同名スロット値には影響が及ばない"
addSlot: #stockAccount valued: bankAccount klone.
stockAccount addSlot: #numShares valued: 0.
stockAccount addSlot: #pricePerShare valued: 30.
self@stockAccount dollars [self numShares * self pricePerShare].
self@stockAccount dollars: x@(Number traits)
[self numShares: ((x as: Float) / self pricePerShare) truncated. self dollars].
stockAccount dollars: 300.
=> 300
stockAccount numShares.
=> 10
stockAccount dollars: 150.
=> 150
stockAccount numShares.
=> 5
addSlot: #myStock valued: stockAccount klone.
myStock dollars: 600.
=> 600
myStock numShares.
=> 20
myStock deposit: 60.
=> 660
myStock numShares.
=> 33
myStock withdraw: 90.
=> 570
myStock numShares.
=> 19
self@bankAccount deposit: x@(Number traits) [self dollars: (self dollars + (x * 0.9))].
self@bankAccount withdraw: x@(Number traits) [self dollars: ((self dollars - (x * 0.9)) max: 0)].
"#deposit: 、#withdraw: の仕様を変えてみる"
bankAccount dollars.
=> 0
bankAccount deposit: 100.
=> 90.0
myAccount dollars.
=> 500
myAccount withdraw: 100. "チャイルドたちにもペアレントに対する改変の影響が及ぶ"
=> 410.0
stockAccount dollars.
=> 150
stockAccount deposit: 100.
=> 240
myStock dollars.
=> 480.0--sumimこのページを編集 (2961 bytes)
| 以下の 2 ページから参照されています。 |
This page has been visited 2568 times.