Smalltalk at: #sgetterGenerator put: "この行から" [ :class | class instVarNames do: [ :slot | {slot, String cr, String tab, '^ ', slot. slot, ': x', String cr, String tab, slot, ' := x'} do: [ :code | class compile: code classified: 'accessing']]]. "この行までが一文" Object subclass: #BankAccount "この行から" instanceVariableNames: 'dollars' classVariableNames: '' poolDictionaries: '' category: 'Category-BankAccount'. "この行までが一文" Utilities authorInitialsPerSe isEmptyOrNil ifTrue: [Utilities setAuthorInitials: 'your initial']. sgetterGenerator value: BankAccount. "この行から" #('deposit: x self dollars: self dollars + x' 'accessing' 'withdraw: x self dollars: (0 max: (dollars - x))' 'accessing' 'initialize dollars := 0' 'initialize') pairsDo: [ :code :category | BankAccount compile: code classified: category]. "この行までが一文" Smalltalk at: #account put: (BankAccount new initialize; yourself). account dollars: 200. account dollars "==> 200" account deposit: 50. account dollars. "==> 250" account withdraw: 100. account dollars. "==> 150" account withdraw: 200. account dollars. "==> 0" BankAccount subclass: #StockAccount "この行から" instanceVariableNames: 'numShares pricePerShare' classVariableNames: '' poolDictionaries: '' category: 'Category-BankAccount'. "この行までが一文" sgetterGenerator value: StockAccount. "この行から" #('dollars ^ self numShares * self pricePerShare' 'accessing' 'dollars: x self numShares: x asFloat / self pricePerShare' 'accessing' 'initialize numShares := 10. pricePerShare := 30' 'initialize') pairsDo: [ :code :category | StockAccount compile: code classified: category]. "この行までが一文" Smalltalk at: #stock put: (StockAccount new initialize; yourself). stock numShares. "==> 10" stock pricePerShare. "==> 30" stock dollars. "==> 300" stock dollars: 150. stock numShares. "==> 5.0" stock dollars: 600. stock dollars. "==> 600.0" stock numShares. "==> 20.0" stock deposit: 60. stock dollars. "==> 660.0" stock numShares. "==> 22.0"
(FileStream oldFileNamed: 'UserScriptionHelping.cs') fileIntoNewChangeSet. #BankAccount << Object attribute: #dollars; define: 'initialize' as: 'dollars := 200'; define: 'deposit: x' as: 'self dollars: self dollars + x'; define: 'withdraw: x' as: 'self dollars: (0 max: self dollars - x)'. #account <== (BankAccount new initialize; yourself). account dollars. "==> 200" account deposit: 50. account dollars. "==> 250" account withdraw: 100. account dollars. "==> 150" account withdraw: 200. account dollars. "==> 0" #StockAccount << BankAccount attribute: #numShares; attribute: #pricePerShare; define: 'initialize' as: 'numShares := 10. pricePerShare := 30'; define: 'dollars' as: '^ self numShares * self pricePerShare'; define: 'dollars: x' as: 'self numShares: x asFloat / self pricePerShare'. #stock <== (StockAccount new initialize; yourself). stock numShares. "==> 10" stock dollars. "==> 300" stock dollars: 600. stock numShares. "==> 20.0" stock deposit: 60. stock dollars. "==> 660.0" stock numShares. "==> 22.0"
は、#BankAccount << Object の返値(BankAccount に束縛されたオブジェクト)に対して、#BankAccount << Object attribute: #dollars; define: 'initialize' as: 'dollars := 200'; define: 'deposit: x' as: 'self dollars: self dollars + x'; define: 'withdraw: x' as: 'self dollars: (0 max: self dollars - x)'.
という複数の文(式)を連続して一気に評価したのと同じ意味を持ち、#BankAccount << Object. BankAccount attribute: #dollars. BankAccount define: 'initialize' as: 'dollars := 200'. BankAccount define: 'deposit: x' as: 'self dollars: self dollars + x'. BankAccount define: 'withdraw: x' as: 'self dollars: (0 max: self dollars - x)'.
(FileStream oldFileNamed: 'PrototypeScripting.cs') fileIntoNewChangeSet. (#BankAccount asClone: Object) attribute: #dollars value: 200; define: 'deposit: x' as: 'self dollars: self dollars + x'; define: 'withdraw: x' as: 'self dollars: (0 max: self dollars - x)'. BankAccount dollars. "==> 200" BankAccount deposit: 50. BankAccount dollars. "==> 250" BankAccount withdraw: 100. BankAccount dollars. "==> 150" BankAccount withdraw: 200. BankAccount dollars. "==> 0" #MyAccount asClone: BankAccount. MyAccount deposit: 500. MyAccount dollars. "==> 500" BankAccount dollars. "==> 0 # プロトタイプのスロットには影響なし。" (#StockAccount asClone: BankAccount) attribute: #numShares value: 10; attribute: #pricePerShare value: 30; define: 'dollars' as: '^ self numShares * self pricePerShare'; define: 'dollars: x' as: 'self numShares: x asFloat / self pricePerShare'. StockAccount dollars. "==> 300" StockAccount dollars: 150. StockAccount dollars. "==> 150.0" StockAccount numShares. "==> 5.0 # 株数値が変更されている。" #MyStock asClone: StockAccount. MyStock dollars: 600. MyStock numShares. "==> 20.0" MyStock deposit: 60. MyStock dollars. "==> 660.0" MyStock numShares. "==> 22.0" MyStock withdraw: 120. MyStock dollars. "==> 540.0" MyStock numShares. "==> 18.0"
このページを編集 (11996 bytes)
以下の 4 ページから参照されています。 |
This page has been visited 5351 times.