设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

小白问题,作用域

查看数: 1041 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2009-12-16 13:04

正文摘要:

本帖最后由 DeathKing 于 2009-12-18 17:52 编辑 这几天想要扩充一下数学库,又想加几个比较弱智的加密算法,结果弄巧成拙。运行时报 code_r[ii] = $a[iii]*$b[ii] 的 [] 没有找到方法。我的$a和$b都用了全局变量 ...

回复

DeathKing 发表于 2009-12-18 17:50:25
也是我的错,也算dz的错,for 一般都是用i做计数器的,dz的 [  i   ]  就认为是斜体{:nm_7:}

所以后来我才会弄成iii{:nm_9:}

也就是我弄二维数组(3*3)的时候就错了?
  1. $code_r=Array.new(2){Array.new(2,0)}
复制代码
应该是:
  1. $code_r=Array.new(3){Array.new(3,0)}
复制代码
紫苏 发表于 2009-12-18 13:41:41
这两段的 code 函数本就不一样嘛,顶楼在 p 的下方只是访问了 code_r 的一维,而楼上又变成了访问二维了…… [] 方法会检测传递进来的索引值是否越界,如果是则动态延长数组长度到(索引值+1),并用 nil 填充延长部分的数组元素~楼上这段代码报错就是因为当 for 循环中的 iii 被赋为 2 时,引用 code_r[2] 越界了,之后 code_r 数组被延长,code_r[2] 就返回了在索引 2 的位置上自动填充的那个 nil
所以对于这个 2×2 的数组,两个 for 循环的上限都应该是 1,或者用三个点的范围运算符,表示不包括上限本身(0...2)
紫苏 发表于 2009-12-18 03:08:02
不是说了么,这段代码没报错,我还以为你在其它地方还有调用呢
DeathKing 发表于 2009-12-17 16:38:06
第19行提到了,我调用的是:p DMath.code([1,2,3],[4,5,6]) 难道是我传递错了{:nm_7:}
现在在学校的微机室{:nm_3:}
紫苏 发表于 2009-12-16 13:33:14
直接运行这段代码没有报错,你提到的问题可能是由于在调用 DMath.code 时给 b 传递了一个不是数组类型的对象(或者其它没有 [] 方法的对象)而导致的,具体得看报错的详细信息(undefined method '[]' for ???)
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-25 23:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表