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

Project1

 找回密码
 注册会员
搜索
查看: 1308|回复: 7
打印 上一主题 下一主题

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

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
帖子
523
跳转到指定楼层
1
发表于 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

前方
迷茫
后方
已不在

Lv1.梦旅人

梦石
0
星屑
200
在线时间
127 小时
注册时间
2005-10-23
帖子
78
2
发表于 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]
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42431
在线时间
7603 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

3
发表于 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
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
帖子
523
4
 楼主| 发表于 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
前方
迷茫
后方
已不在
回复

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

5
发表于 2011-6-29 16:54:30 | 只看该作者
[] 和 []= 是兩個不同的方法。

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

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
帖子
523
6
 楼主| 发表于 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


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

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

7
发表于 2011-6-29 19:40:42 | 只看该作者
本帖最后由 禾西 于 2011-6-29 19:42 编辑

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

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2011-6-29
帖子
44
8
发表于 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
是自己亲手将自己扼杀在了摇篮中,亦或是上帝让汝之生命走到了尽头?
回复

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-26 08:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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