Ruby 可以打印实例变量而不是实例地址吗?
Ruby can an instance variable be printed instead of the instance address?
我最近在 ruby 中进行试验,遇到了一个障碍。我想将一个 class 实例推送到一个数组,而不是在打印数组元素时输出它:
[#< 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
谢谢
只需像这样覆盖 to_s
方法:
def to_s
wName
end
如果你想通过使用单个 puts
获得像 ["M16"]
这样的输出,我会使用 Array
的 .map
方法,如下所示:
namesArray = vA.map do |weapon|
weapon.wName
end
puts namesArray
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"]
我最近在 ruby 中进行试验,遇到了一个障碍。我想将一个 class 实例推送到一个数组,而不是在打印数组元素时输出它: [#< 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
谢谢
只需像这样覆盖 to_s
方法:
def to_s
wName
end
如果你想通过使用单个 puts
获得像 ["M16"]
这样的输出,我会使用 Array
的 .map
方法,如下所示:
namesArray = vA.map do |weapon|
weapon.wName
end
puts namesArray
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"]