编程可能很有趣,也可能令人沮丧……尤其是当您在学习新语言时不注意别人给您的提示时。 在最近的LaunchSchool Ruby练习中,我通过艰辛的方式学习了这一课。
该练习涉及在“ n”大小的网格上创建一个8尖的“星形”。 “方格?” 我想,“听起来像是一个完美的时机,第一次使用Ruby语言提取数组!” 我拿起RubyDoc并看了看构造函数方法,浏览直到找到所需的条目。
Array.new(size = 0,default = nil)
好完美! 我可以使用此构造函数创建数组,将另一个Array构造函数作为第二个参数传入,以创建数组数组!
星= Array.new(n,Array.new(n,'')
在那看一下……现在,我们只需要将其放入函数中,并创建第一条对角星线,以确保一切正常。
- 从设计简介到网关孵化器的启动
- 在Multan Board矩阵结果2016中做到最简单的技巧
- 当您可以免费在线学习时,为什么要花钱在课程上
- 工作的未来:学习管理不确定性
- 用H.urna引入编程-游戏:Globo迷宫
def star(n)
星= Array.new(n,Array.new(n,''))
stars.each_with_index做
索引
arr [index] ='*'
结束
stars.each {
rr
帕尔}
结束
星(7)
这应该给我们一个很好的对角线,从左上角到右下角……。
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
[“ *”,“ *”,“ *”,“ *”,“ *”,“ *”,“ *”]
等等…什么?!?! 怎么可能 我在每次迭代中只分配了一个值,它们如何全部更改?!?! (注意。每当您假设计算机做错了什么,就可能是您…)
当发生这种疯狂时,最好进入IRB。 让我们再试一次…
> a1 = Array.new(3,Array.new(3,''))
=> [[“”,“”,“”],[“”,“”,“”],[“”,“”,“”]]
好。 到目前为止,到目前为止,我们已经有了一个预期的数组数组。 现在,让我们尝试分配一个值并再次打印…
> a1 [0] [0] ='*'
=>“ *”
> p a1
=> [[“ *”,“”,“”],[“ *”,“”,“”],[“ *”,“”,“”]]
等等…再来一次! 怎么可能? 我只分配了一个值,所有三个值都已更新?!?! 哦……等等……
> a1 [0] .object_id
=> 70297751770680
> a1 [1] .object_id
=> 70297751770680
> a1 [2] .object_id
=> 70297751770680
实际上,所有三个子数组都引用相同的数组! 通过查看每个单独的数组引用返回的对象ID可以看到这一点。 好吧,这很愚蠢,我的意思是……为什么不在RubyDoc中这么说呢?


糟糕…..事实证明确实如此。 如果我只是花时间仔细阅读它,而不是抢走构造函数并运行它……那本可以节省时间! 让我们再试一次。 这次可以正确地遵循Ruby-doc的说明并使用一个块。
def star(n)
stars = Array.new(n){Array.new(n,'')}
stars.each_with_index做
索引
arr [index] ='*'
结束
stars.each {
rr
帕尔}
结束
星(7)
这给了我们期望的漂亮的第一个对角线!
[“ *”,“”,“”,“”,“”,“”,“”]
[“”,“ *”,“”,“”,“”,“”,“”]
[“”,“”,“ *”,“”,“”,“”,“”]
[“”,“”,“”,“ *”,“”,“”,“”]
[“”,“”,“”,“”,“ *”,“”,“”]
[“”,“”,“”,“”,“”,“ *”,“”]
[“”,“”,“”,“”,“”,“”,“ *”]
哦,还吸取了另一个教训……现在,我们可以继续实施,并希望获得预期的结果。 通过简单的练习,现在比在更复杂的应用程序中更好!
这里需要更多的耐心和彻底,并注意别人给我们的提示!