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.方法选择器不是以小写字母开头
选择器以小写字母开头是一种传统。从这个意义上说,genLista
比 GenLista
.
更正确
2。方法选择器包括缩写词 'gen'
例如,genLista
可以重命名为 genereLista
o listaAlAzar
(如果您决定使用西班牙语)
3。名为 lista
的 Array
有 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
不编译,因为没有点表示两个句子之间的分隔。请注意,错误发生在编译时(即,当您保存方法时),因为 return 标记 ^
必须启动语句(即,它不能内联在语句中)。
在其他情况下,缺少点不会阻止代码编译。相反,错误将在运行时发生。这是一个(典型的)例子:
1 to: 10 do: [:i | self somethingWith: i] "<- missing dot here"
self somethingElse
缺少点将产生运行时错误self not understood by block
。
5.有一种更具表现力的随机生成 0 和 1 的方法
计算2 atRandom - 1
没问题。然而,它迫使 reader 在心里计算。一个更好的表达你的意图的方法是
#(0 1) atRandom
6.玩随机数时不要忘记保存种子
虽然可以使用 atRandom
,但这种做法只应与 "toy" 代码一起使用。如果您正在开发系统或库,建议的做法是在生成任何随机数据之前将种子保存在某个地方。这将允许您稍后为了调试或确认而重现随机数量的生成。 (但是请注意,这不足以使您的程序确定性地重现,因为无序(例如散列)集合在连续执行中可能会形成不同的形式。)
我正在尝试用随机数(只有 0 或 1)创建一个数组,但是当我 运行 它时,它只是打印:遇到语句列表结束 ->
这是我的代码:
GenList
| lista |
lista := Array new: 31.
1 to: 30 do: [ :i | lista at: i put: 2 atRandom - 1]
^lista
我能做什么?
需要考虑的一些有趣的事情:
1.方法选择器不是以小写字母开头
选择器以小写字母开头是一种传统。从这个意义上说,genLista
比 GenLista
.
2。方法选择器包括缩写词 'gen'
例如,genLista
可以重命名为 genereLista
o listaAlAzar
(如果您决定使用西班牙语)
3。名为 lista
的 Array
有 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
不编译,因为没有点表示两个句子之间的分隔。请注意,错误发生在编译时(即,当您保存方法时),因为 return 标记 ^
必须启动语句(即,它不能内联在语句中)。
在其他情况下,缺少点不会阻止代码编译。相反,错误将在运行时发生。这是一个(典型的)例子:
1 to: 10 do: [:i | self somethingWith: i] "<- missing dot here"
self somethingElse
缺少点将产生运行时错误self not understood by block
。
5.有一种更具表现力的随机生成 0 和 1 的方法
计算2 atRandom - 1
没问题。然而,它迫使 reader 在心里计算。一个更好的表达你的意图的方法是
#(0 1) atRandom
6.玩随机数时不要忘记保存种子
虽然可以使用 atRandom
,但这种做法只应与 "toy" 代码一起使用。如果您正在开发系统或库,建议的做法是在生成任何随机数据之前将种子保存在某个地方。这将允许您稍后为了调试或确认而重现随机数量的生成。 (但是请注意,这不足以使您的程序确定性地重现,因为无序(例如散列)集合在连续执行中可能会形成不同的形式。)