查看: 1529|回复: 7

[已经解决] 谁能解释一下这段代码。

  [复制链接]
梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
回帖
469
发表于 2011-6-28 13:27:14 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 龙腾天下 于 2011-6-28 13:27 编辑

class C
  def initialize
    @ary = [0,1,2,3,4,5,6,7]
  end
  def [](i)
    @ary[i * 2]
  
end
  def []=( i, v )
    @ary[i * 2] = v
  
end
end
c = C.new
p c[3]      # 变成 c.[]( 3 ), 结果为6
p c[3] = 1  # 变成 c.[]=(3,1),结果为1

前方
迷茫
后方
已不在
梦石
0
星屑
210
在线时间
127 小时
注册时间
2005-10-23
回帖
63
发表于 2011-6-28 13:36:42 | 显示全部楼层
这个涉及到重载这个概念来着 这里定义了[]的索引
def [](i) 这个是在你调用 Class C类的一个对象 比如 c[i]的时候做的操作 p c[3]这里 ()里传的就是这个3 所以读取的数字是@ary[3*2]这个元素也就是第6个元素
def []=(i,v)的意思是C[i]=V的时候做的操作,例如c[3] = 1 这里因为代码中写的是@ary[3*2]=1所以 第6个元素会变成1
我是这么理解着用来着。

点评

为什么@ary[3*2]和@ary[3*2]=1(等于1这个难道不会报错?(难道这个不是运算))就有如此大的不同呢?  发表于 2011-6-29 16:39
世界不会在意你的自尊,人们看的只是你的成就。在你没有成就以前,切勿过分强调自尊。
[b]本人姓名:异界的月[/b]
[b]空之轨迹菜单系列[/b]
2.01版增加任务菜单 地址[url=http://rpg.blue/viewthread.php?tid=135748&extra=page%3D1]http://rpg.blue/viewthread.php?tid=135748&extra=page%3D1[/url]
1.00版地址[url=http://rpg.blue/viewthread.php?tid=129463&extra=page%3D1]http://rpg.blue/viewthread.php?tid=129463&extra=page%3D1[/url]
[b]转投希艾拉工作室当脚本师,龟速制作中[/b]
[b]转职为三次元苦逼渣渣程序员[/b]
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45788
在线时间
7954 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2011-6-28 14:37:45 | 显示全部楼层
表示完全没看出啦哪里有问题,
p c[3] => c.[](3) => @ary[i*2] = > @ary[6] = 6
p c[3] = 1 => @ary[6] = 1

不知道你想问什么?
有必要提醒的一点就是你重定义的是C类的方法而不是Array类的方法.

点评

[3] =>在def [](i) 中变成了 i = 3 ? 这里p c[3] = 1 => @ary[6] = 1 ,特别是 @ary[6] = 1 不能用运算来理解吗?  发表于 2011-6-29 16:44
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
回帖
469
 楼主| 发表于 2011-6-29 16:45:42 | 显示全部楼层
kinguanghua 发表于 2011-6-28 13:36
这个涉及到重载这个概念来着 这里定义了[]的索引
def [](i) 这个是在你调用 Class C类的一个对象 比如 c的 ...

Class C类 是怎么一回事?换成其他字母可以吗?如:a = C.new

点评

这个完全没问题,后面c改为a就可以了~  发表于 2011-6-29 20:29
前方
迷茫
后方
已不在
回复

使用道具 举报

酱油的

梦石
0
星屑
1840
在线时间
2161 小时
注册时间
2007-12-22
回帖
3216

贵宾

发表于 2011-6-29 16:54:30 | 显示全部楼层
[] 和 []= 是兩個不同的方法。

符號的含義是人類賦予的,在賦予含義之前所有符號都沒有意義。你記住這個就行了。
不要讓先入為主的定義影響你的思維。

点评

原来如此,太感谢你了。 如果像你那么说,那(i)和( i, v )不都是参数?而下面都是进行参数的计算而已。  发表于 2011-6-29 17:15
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
回帖
469
 楼主| 发表于 2011-6-29 17:17:10 | 显示全部楼层
禾西 发表于 2011-6-29 16:54
[] 和 []= 是兩個不同的方法。

符號的含義是人類賦予的,在賦予含義之前所有符號都沒有意義。你記住這個就 ...

再另外,
p c[3]      # 变成 c.[]( 3 ), 结果为6
             p c[3] = 1  # 变成 c.[]=(3,1),结果为1


怎么理解?
前方
迷茫
后方
已不在
回复

使用道具 举报

酱油的

梦石
0
星屑
1840
在线时间
2161 小时
注册时间
2007-12-22
回帖
3216

贵宾

发表于 2011-6-29 19:40:42 | 显示全部楼层
本帖最后由 禾西 于 2011-6-29 19:42 编辑

所謂的回調。
ruby函數默認地在結束時返回最後一個處理的數據,也就是那個關鍵字 return 做的事情。
你可以簡單地認為這個是數據殘留。

点评

虽然没有认可你的答案,谢谢您!  发表于 2011-6-29 20:44
头像卖萌= =  发表于 2011-6-29 20:23
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

梦石
0
星屑
50
在线时间
9 小时
注册时间
2011-6-29
回帖
43
发表于 2011-6-29 20:27:12 | 显示全部楼层
class C
def initialize #初始化
  @ary = [0,1,2,3,4,5,6,7] #生成ary
  end
  def [](i) #调用[](i)方法
    @ary[i * 2]  #返回@ary中index为i*2(是否需要加1?的数值
end
  def []=( i, v ) #调用[i] = v
    @ary[i * 2] = v  #返回@ary中index为i*2赋值为v之后的值(就是返回V= =
end
end
c = C.new # 生成一个c
p c[3]      # 变成 c.[]( 3 ), 结果为6
p c[3] = 1  # 变成 c.[]=(3,1),结果为1

点评

远远地看着这头像像yangff的啊囧  发表于 2011-6-30 09:50
是自己亲手将自己扼杀在了摇篮中,亦或是上帝让汝之生命走到了尽头?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部