/ / Ruby je možné namiesto adresy inštancie vytlačiť premennú inštancie? - polia, rubíny, triedy, inštancie, inštancie-premenné

Ruby je možné namiesto adresy inštancie vytlačiť premennú inštancie? - polia, rubíny, triedy, inštancie, inštancie-premenné

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ď č. 1

Stačí 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