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

Project1

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

[已经过期] 请问:为什么是level不是@level

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
23989
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

1
发表于 2021-8-18 15:35:31 | 显示全部楼层
这么多的level你改了哪一个?而且这段代码真的没问题吗……感觉没设置@level吧
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23989
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2021-8-18 16:06:07 | 显示全部楼层
本帖最后由 guoxiaomi 于 2021-8-18 16:21 编辑
enghao_lim 发表于 2021-8-18 15:52
def level=(level)
    # 检查上下限
    level = [[level, $data_actors[@actor_id].final_level].min, 1] ...


不完全是这样,如果等级越界,level = 后面的内容计算出来了一个整数:比如level = 0 就是新建了一个全新的临时变量level,并且赋值为 0;但是如果等级没有越界,实际执行了 level = level,就会什么都不发生,本行跳过。此时如你所说的,出现的level都是传入的那个。
可以看下面的测试代码和结果。由于ruby里整数是即时值,所以我把一个BigDecimal对象传进来:
  1. require 'bigdecimal'
  2. class A
  3.   def level=(level)
  4.     p [level, level.class, level.object_id]
  5.     level = [level, BigDecimal('1')].min
  6.     p [level, level.class, level.object_id]
  7.     get_level(level)
  8.   end

  9.   def get_level(level)
  10.     p [level, level.class, level.object_id]
  11.   end
  12. end

  13. a = A.new
  14. a.level = BigDecimal('100')
  15. a.level = BigDecimal('-100')
复制代码
输出是:
  1. [0.1e3, BigDecimal, 70368280579580]
  2. [0.1e1, BigDecimal, 70368280578900] # 100 > 1,level 是新创建的临时变量
  3. [0.1e1, BigDecimal, 70368280578900]
  4. [-0.1e3, BigDecimal, 70368280577880]
  5. [-0.1e3, BigDecimal, 70368280577880] # -100 < 1,level 还是原来那个
  6. [-0.1e3, BigDecimal, 70368280577880]
复制代码


对原问题的解答,任何时候使用@level都是指的同一个变量。如果你要改成@level,就要改@level = XXX以及后面的get_exp(@level)

此外,下面写了self.exp=,为什么要加self,是因为如果不加self,exp=XXX就是对临时变量exp的赋值,但是加上self后就是调用函数 self.exp=(XXX)。

点评

知识太高深。理解不了,能简单说下吗?  发表于 2021-8-21 16:10
啊我就是闲得无聊来找茬  发表于 2021-8-19 00:58
0 != 0  发表于 2021-8-18 21:18
Erm...太过细节了,如果要考虑对象就会出现0 = 0的情况,我不确定LZ是否可以理解,但是把参考系列出来应该相对容易理解的。  发表于 2021-8-18 21:16
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-6-16 04:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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