查看: 2590|回复: 3

[已经解决] Window_Selectable里cursor_down方法里面的index是哪来的?

[复制链接]
梦石
0
星屑
1957
在线时间
410 小时
注册时间
2018-9-25
回帖
25
发表于 2020-5-21 14:32:29 | 显示全部楼层 |阅读模式

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

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

×
  1.   #--------------------------------------------------------------------------
  2.   # ● 光标向下移动
  3.   #--------------------------------------------------------------------------
  4.   def cursor_down(wrap = false)
  5.     if index < item_max - col_max || (wrap && col_max == 1)
  6.       select((index + col_max) % item_max)
  7.     end
  8.   end
复制代码
想写一个非Window类的Selectable,然后对着Window_Selectable抄着抄着就报错了,然后才发现cursor_down里面还有一个莫名其妙的index,明明没有输入index,也没有定义index方法,看window里面也没有index属性,那这里的index是怎么回事?正常来说不是会报错吗?

头像被屏蔽
梦石
0
星屑
5706
在线时间
922 小时
注册时间
2013-8-29
回帖
1401
发表于 2020-5-21 14:36:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2020-5-21 15:09:31 | 显示全部楼层
本帖最后由 KB.Driver 于 2020-5-21 15:15 编辑
chanszeman1018 发表于 2020-5-21 14:36
index不是一个方法吧?
它只是一个用来儲存光标位置的实例变量吧?


抓个虫,这里的index确实是一个方法

attr_reader是一个特殊的方法
这类可以在类中调用的方法有一个名字叫“类宏”

attr_reader的原理就是为所在上下文(类)定义一个实例方法
比如attr_reader :index,就会定义一个实例方法index,方法返回实例变量@index的值
形式类似于
def index
  @index
end

同一类型的还有attr_writer,attr_accessor
attr_writer :index相当于
def index=(x)
  @index = x
end

attr_accessor相当于同时调用attr_reader与attr_writer

至于为什么要这么写,因为ruby的实例变量默认是private的,也就是无法被外部直接访问。
attr_*相当于属性访问器,reader使外部可以读变量,writer使外部可以改写变量。
写一行attr_accessor比定义两个方法不是省事多了吗?

评分

参与人数 2星屑 +100 赞 +1 收起 理由
VIPArcher + 100 认可答案
chanszeman1018 + 1 塞糖

查看全部评分

用头画头像,用脚写脚本
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部