我最近在红宝石上做实验并遇到了障碍。我想将一个类实例推送到一个数组,而不是在打印数组元素时输出它: [#< WeaponItem:0x00000002a28058 @wName =" M16A1",@ mP = 5,@ mxP = 35>]
我想要输出:
[" M16A1"]
但是符号和实例变量(self.variable,self.class.variable)没有预期的效果,我不能用正确的方法锤击,所以我想知道这是否是可能的努力。
代码:
class WeaponItem
attr_reader :wName
def initialize(wName,mPower,mxPower)
@wName = wName
@mP = mPower
@mxP = mxPower
end
def getStats
puts "Weapon"
puts "Name: #{@wName}"
puts "Damage: #{@mP}~#{@mxP}"
end
def calculateDamage()
rMAX = @mxP/@mP
rMAX
end
end
vA = Array.new(3){0}
wP = WeaponItem.new("M16A1", 5, 15)
vA.push(wP)
print vA
谢谢
答案 0 :(得分:1)
只需覆盖to_s
方法,如下所示:
def to_s
wName
end
答案 1 :(得分:1)
class WeaponItem
attr_reader :wName
def initialize(wName,mPower,mxPower)
@wName = wName
@mP = mPower
@mxP = mxPower
end
def getStats
puts "Weapon"
puts "Name: #{@wName}"
puts "Damage: #{@mP}~#{@mxP}"
end
def calculateDamage()
rMAX = @mxP/@mP
rMAX
end
end
vA = Array.new
wP = WeaponItem.new("M16A1", 5, 15)
vA.push(wP.wName)
print vA
#=> ["M16A1"]
答案 2 :(得分:0)
如果您希望仅使用一个["M16"]
获得puts
之类的输出,我会使用.map
这样的Array
方法:
namesArray = vA.map do |weapon|
weapon.wName
end
puts namesArray