簡體   English   中英

對於Pharo Smalltalk中的陣列循環

[英]For loop for array in Pharo Smalltalk

我正在嘗試使用隨機數(只有0或1)創建一個數組,但是當我運行它時,它只是打印出來:遇到語句列表的結尾 - >

這是我的代碼:

GenList
 | lista |
  lista := Array new: 31.
  1 to: 30 do: [ :i | lista at: i put: 2 atRandom - 1]
  ^lista

我能做什么?

一些有趣的事情要考慮:


1.方法選擇器不以小寫字母開頭


選擇器以小寫字母開頭是一種傳統。 從這個意義上說, genListaGenLista更正確。


方法選擇器包含縮寫詞'gen'。


例如, genLista可以重命名為genereLista o listaAlAzar (如果您決定使用西班牙語)


3.名為listaArray有31個元素,而不是30個元素


Array new: 31的結果是31個元素的數組。 但是,它下面的代碼只填充其中的30個,留下最后一個未初始化(即, nil )。 可能的解決方案: lista := Array new: 30


4.缺少一個點導致編譯錯誤


編碼

  1 to: 30 do: [ :i | lista at: i put: 2 atRandom - 1]
  ^lista

因為沒有指示兩個句子之間分隔的點,所以不會編譯。 請注意,錯誤發生在編譯時(即,當您保存方法時),因為返回標記^必須啟動一個語句(即,它不能在語句中內聯)。

在其他情況下,丟失的點不會阻止代碼編譯。 相反,錯誤將在運行時發生。 這是一個(典型的)例子:

1 to: 10 do: [:i | self somethingWith: i]     "<- missing dot here"
self somethingElse

丟失的點將生成運行時錯誤, self not understood by block


5.有一種更有表現力的方法可以隨機生成0和1


2 atRandom - 1的計算2 atRandom - 1是可以的。 然而,它迫使讀者在精神上做數學。 揭示你的意圖的更好方法就是

#(0 1) atRandom

6.使用隨機數時,不要忘記保存種子


雖然可以使用atRandom ,但這種做法只能與“玩具”代碼一起使用。 如果您正在開發系統或庫,建議的做法是在生成任何隨機數據之前將種子保存在某處。 這將允許您稍后重現隨機數量的生成,以便進行調試或確認。 (但請注意,這不足以使您的程序具有確定性的可重現性,因為無序(例如散列)集合在連續執行中可能會有不同的形式。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM