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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1957
在线时间
410 小时
注册时间
2018-9-25
帖子
38
跳转到指定楼层
1
发表于 2020-5-21 14:32:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  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是怎么回事?正常来说不是会报错吗?

头像被屏蔽

Lv4.逐梦者 (禁止发言)

梦石
0
星屑
5701
在线时间
922 小时
注册时间
2013-8-29
帖子
1468
2
发表于 2020-5-21 14:36:12 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

3
发表于 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 塞糖

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 03:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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