Ruby可以打印实例变量而不是实例地址吗?

时间:2015-05-20 05:35:11

标签: arrays ruby class instance instance-variables

我最近在红宝石上做实验并遇到了障碍。我想将一个类实例推送到一个数组,而不是在打印数组元素时输出它: [#< 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

谢谢

3 个答案:

答案 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