gpt4 book ai didi

oop - Pharo Smalltalk 中的数组的 For 循环

转载 作者:行者123 更新时间:2023-12-04 22:18:50 25 4
gpt4 key购买 nike

我正在尝试使用随机数(只有 0 或 1)创建一个数组,但是当我运行它时,它只会打印:遇到语句列表结束 ->

这是我的代码:

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

我能做什么?

最佳答案

一些有趣的事情需要考虑:

1.方法选择器不以小写字母开头

选择器以小写字母开头是一个传统。从这个意义上说, genListaGenLista 更正确。

2.方法选择器包含缩写词'gen'

例如,genLista 可以重命名为 genereLista o listaAlAzar(如果您决定使用西类牙语)

3.名为Arraylista有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是可以的。然而,它迫使读者在心理上进行数学计算。揭示你的意图的更好方法是
#(0 1) atRandom

6.玩随机数时不要忘记保存种子

虽然可以使用 atRandom ,但这种做法只能与“玩具”代码一起使用。如果您正在开发系统或库,建议的做法是在生成任何随机数据之前将种子保存在某处。这将允许您稍后为了调试或确认而重现随机量的生成。 (但是请注意,这不足以使您的程序具有确定性的可重现性,因为无序(例如散列)集合在连续执行中可能形成不同的形式。)

关于oop - Pharo Smalltalk 中的数组的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com