Project1

标题: 谁能解释一下这段代码。 [打印本页]

作者: 龙腾天下    时间: 2011-6-28 13:27
标题: 谁能解释一下这段代码。
本帖最后由 龙腾天下 于 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

dsu_plus_rewardpost_czw
作者: kinguanghua    时间: 2011-6-28 13:36
这个涉及到重载这个概念来着 这里定义了[]的索引
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
我是这么理解着用来着。
作者: fux2    时间: 2011-6-28 14:37
表示完全没看出啦哪里有问题,
p c[3] => c.[](3) => @ary[i*2] = > @ary[6] = 6
p c[3] = 1 => @ary[6] = 1

不知道你想问什么?
有必要提醒的一点就是你重定义的是C类的方法而不是Array类的方法.
作者: 龙腾天下    时间: 2011-6-29 16:45
kinguanghua 发表于 2011-6-28 13:36
这个涉及到重载这个概念来着 这里定义了[]的索引
def [](i) 这个是在你调用 Class C类的一个对象 比如 c的 ...

Class C类 是怎么一回事?换成其他字母可以吗?如:a = C.new
作者: 禾西    时间: 2011-6-29 16:54
[] 和 []= 是兩個不同的方法。

符號的含義是人類賦予的,在賦予含義之前所有符號都沒有意義。你記住這個就行了。
不要讓先入為主的定義影響你的思維。
作者: 龙腾天下    时间: 2011-6-29 17:17
禾西 发表于 2011-6-29 16:54
[] 和 []= 是兩個不同的方法。

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

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


怎么理解?
作者: 禾西    时间: 2011-6-29 19:40
本帖最后由 禾西 于 2011-6-29 19:42 编辑

所謂的回調。
ruby函數默認地在結束時返回最後一個處理的數據,也就是那個關鍵字 return 做的事情。
你可以簡單地認為這個是數據殘留。
作者: ~❤    时间: 2011-6-29 20:27
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





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1