您好,我學習,是新的smalltalk和我試圖打印我的SortedCollection屏幕試圖使用keysAndValueDo但我不知道如何完成它,如果任何人可以給我是一個很好的例子打印SortedCollection使用keysAndValueDo(smalltalk)
回答
部分1 - 顯示在屏幕上
最直接的方式打印到屏幕在一個基於GUI的Smalltalk是使用消息:
Transcript show: 'some text'
(轉錄物被顯示爲可滾動的窗口的系統對象) 。
要確保有顯示文本的每一行之前有一個換行符,我們發送消息cr
談話
Transcript cr.
Transcript show: 'some text'.
的快捷方法,可以節省我們重新輸入一遍又一遍Transcript
,是一個接一個地發送抄本一系列消息。這被稱爲消息級聯。每次我們在;
結束消息時,這意味着發送到同一個接收器,因爲最後一條消息發送到。
然後,我們可以再次縮短這一點,因爲Smalltalk不關注表達式中的換行符。
最終顯示消息級聯變爲:
Transcript cr; show: 'some text'.
第2部分:枚舉aSortedCollection使用keysAndValuesDo: 此關鍵字消息是SequencableCollectionand其方法的標題是:
keysAndValuesDo: aBlock "Enumerate the receiver with all the keys (aka indices) and values."
(它的工作原理Dolphin,Squeak及其衍生品Pharo和Cuis也是如此)。
關鍵字消息keysAndValuesDo:
需要塊參數。
塊是一個匿名對象,有一種方法。其方法定義在一對匹配的方括號之間 - 一對[
... ]
對。
在這種情況下,我們需要一個塊中的局部變量作爲集合中每個元素的關鍵字,另一個局部變量作爲每個元素的值。
我們可以稱他們爲我們喜歡的任何東西,在這種情況下,它們出現的順序非常重要。 keysAndValuesDo:
會將元素的關鍵字放入塊中的第一個局部變量中,並將該元素的值放入塊中的第二個局部變量中。
塊中的局部變量在塊的開始處聲明,每個變量名的前綴爲:
。局部變量聲明以|
結束。
塊則看起來像
[:local1 :local2 | "do something for each element, with the key in local1 and the value in local2" ]
我更喜歡有意義的局部變量名,所以我會用eachKey
和eachValue
。
3部分:全部放在一起
要通過mySortedCollection
"Declare the mySortedCollection variable"
|mySortedCollection|
"Initialise the collection"
mySortedCollection := SortedCollection new.
"add in some data to the collection"
mySortedCollection add: ('First') ;
add: ('Second') ;
add: ('Third').
"Enumerate through the collection, displaying to the Transcript window"
mySortedCollection keysAndValuesDo:
[:eachKey :eachValue |
Transcript cr; show: eachKey; show: ' '; show: eachValue
] .
枚舉代碼到一個工作區粘貼(已知爲在一個菲羅遊樂場,從版本4.0以上)。選擇文字。選擇後,右鍵單擊(在兩個或三個按鈕上),然後從菜單中選擇「執行」。或者使用Ctrl-d作爲鍵盤快捷鍵。 (確切的和絃鍵可能你的平臺上會發生變化)
最後說明
在SortedCollection或OrderedCollection,關鍵是指數。該值是存儲在元素[index]處的值。
在字典中,元素的關鍵是關鍵,元素的值是值。
SortedCollections按照元素值的順序排序,根據集合的定義排序塊。在沒有自定義排序塊的情況下,它們將按升序添加。巧合地,'First'
,'Second'
和'Third'
按字母順序排列。在這個例子中,它恰好可以很好地工作。
下面的例子適用於Pharo Smalltalk,其他的Smalltalk實現可能類似。
首先,看看現有的打印方法爲例。在
SortedCollection
的情況下,您可以在其超類Collection
的printing
協議中找到它們。您會發現元素的打印在
printElementsOn:
中定義。所以你可以用SortedCollection
覆蓋這個方法。
這裏是一個printElementsOn:
方法將使用keysAndValuesDo:
,因爲你問了:
printElementsOn: aStream
aStream nextPut: $(.
self keysAndValuesDo: [:key :value |
aStream
nextPut: $(;
print: key;
nextPut: $:;
space;
print: value;
nextPut: $)].
aStream nextPut: $)
現在印刷前的集合:
「一SortedCollection(1 2 3 3 5 10)「
will print:
「一個SortedCollection((1:1)(2:2)(3:3)(4:3)(5:5)(6:10))」
- 1. Smalltalk - 每2秒打印一次東西
- 2. 如何從Smalltalk漂亮地打印XML?
- 3. 如何在smalltalk中打印換行
- 4. 如何在使用Smalltalk OrderedCollection打印時在元素之間添加空格?
- 5. 如何在Smalltalk中打印getter方法的結果?
- 6. 如何在Smalltalk中打印來自OrderedCollection的對象數據
- 7. 打印使用打印文檔
- 8. 使用ace打印ICEfaces:打印機
- 9. 使用@media打印ExtJS圖表打印
- 10. 使用pdf打印機打印文檔
- 11. 使用收據打印機打印
- 12. 打印使用jQuery
- 13. jQuery.lazyload使用打印
- 14. 使用'\ n'打印
- 15. 打印使用python
- 16. 打印使用jQuery
- 17. 打印使用jQuery
- 18. 打印使用angularjs
- 19. 使用delphi打印
- 20. 使用PHP打印到熱敏收據打印機使用PHP
- 21. 使用PHP打印到外部收據打印機使用PHP
- 22. 使用SenchaTouch使用Phonegap打印到外部收據打印機
- 23. 使用php直接打印到網絡打印機使用php
- 24. 在SmallTalk中使用LinkedList類?
- 25. Smalltalk,在BlockClosure上使用'值'
- 26. 如何使用打印機API在JAVA中打印用於打印的文本?
- 27. 打印使用用戶名
- 28. 使用Applescript打開打印隊列。 (或者:如何使用AppleScript打印PDF?)
- 29. Eclipse - 使用Google雲打印從應用打印報告
- 30. PHP預打印使用動態用戶值打印的證書
你可以發佈你的代碼並描述你看到的錯誤嗎?查看[問]和[mcvc],然後編輯您的問題。 –
你正在使用哪個Smalltalk實現? – MartinW