Ruby类实例无法返回size实例变量值的问题求助
问题分析与解决:Ruby实例变量未正确赋值导致结果不符
你的代码运行后输出Not true而非预期的Hello,核心问题出在**@size的作用域错误**:
在Ruby中,@前缀的变量是实例变量,但如果直接定义在类的顶层(既不在实例方法内,也不在initialize方法中),它属于类对象自身(类实例变量),而非类所创建的具体实例。当你调用aarakocra.displaySize时,方法内的@size是当前Monster实例的变量,这个变量从未被赋值,因此返回nil,自然不等于"medium",最终执行else分支。
解决思路
方案1:在initialize中给实例变量赋值
如果每个Monster实例需要独立的size属性,在初始化方法中为实例变量@size赋值:
class Monster def initialize(name, statStr, statDex, statCon, statInt, statWis, statCha) @name = name @statStr = statStr @statDex = statDex @statCon = statCon @statInt = statInt @statWis = statWis @statCha = statCha @size = "medium" # 为当前实例的@size赋值 end # ... 其他方法保持不变 ... end
方案2:使用类变量(所有实例共享同一值)
如果所有Monster实例的size都是固定的"medium",可以用类变量(@@前缀)实现共享:
class Monster @@size = "medium" # 类变量,所有Monster实例共享 # ... 其他代码 ... def displaySize return @@size end end
方案3:直接返回固定值(最简方式)
如果size不需要动态修改,直接在displaySize方法中返回固定字符串即可:
def displaySize "medium" end
修改后运行代码,aarakocra.displaySize会返回"medium",条件判断成立,将输出预期的Hello。
内容的提问来源于stack exchange,提问作者Thrayna
相关产品推荐
相关产品推荐

