代码之家  ›  专栏  ›  技术社区  ›  Diana

Pharo Smalltalk中的For循环For数组

  •  5
  • Diana  · 技术社区  · 8 年前

    这是我的代码:

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

    我能做什么?

    1 回复  |  直到 8 年前
        1
  •  14
  •   Leandro Caniglia Charlie    8 年前

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


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


    选择器通常以小写字母开头。从这个意义上说, genLista 将比 GenLista



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


    Array 已命名 lista 有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