Nedávno som experimentoval v rubíne a prišiel somcez zádrhel. Chcem poslať inštanciu triedy do poľa a namiesto toho ju vytlačiť pri tlači prvkov poľa: [# <Zbraň: 0x00000002a28058 @ wName = "M16A1", @ mP = 5, @ mxP = 35>]
Namiesto toho chcem, aby výstup:
[ "M16A1"]
ale symboly a premenné inštancie (self.variable, self.class.variable) nemajú zamýšľaný efekt a nedokážem kladivo použiť tú správnu metódu, tak som sa čudoval, či je to dokonca možné úsilie.
kód:
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
Ďakujem
odpovede:
1 pre odpoveď č. 1Stačí prepísať to_s
takto:
def to_s
wName
end
1 pre odpoveď č. 2
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"]
0 pre odpoveď č. 3
Ak chcete mať výstup ako ["M16"]
iba pomocou jedného puts
, Použil by som .map
metóda Array
ako toto:
namesArray = vA.map do |weapon|
weapon.wName
end
puts namesArray