在 ruby?? 中,我創建了一個類和陣列,從文本檔案中讀取內容然后輸出它們。
class Album
attr_accessor :artist, :title, :genre, :tracks
album = Album.new(album_title, album_artist, album_genre, tracks)
-> 軌道是使用 while 回圈從文本檔案中讀取的多行陣列。下面的背景關系,a_file/music_file File.new("album.txt", "r")
class Track
attr_accessor :name, :location
def read_track(a_file)
track_title = a_file.gets()
track_location = a_file.gets()
track = Track.new(track_title, track_location)
end
def read_tracks(music_file)
tracks = Array.new()
count = music_file.gets().to_i()
track = music_file
index = 0
while (index < count)
track = read_track(music_file)
tracks << track
index = 1
end
return tracks
end
在專輯 = Album.new(album_title,album_artist,album_genre,tracks) 之后,我將專輯傳遞給了一個不同的程序 print_tracks(album),在 print_tracks(album) 中,我已經把專輯.tracks
但是我沒有列印出幾行曲目名稱和曲目位置,而是得到如下所示的內容:
#<Track:0x000055c028027b08>
#<Track:0x000055c0280277c0>
#<Track:0x000055c028027630>
如何列印出檔案上的實際文字。
uj5u.com熱心網友回復:
你得到的回報是你的 Track 類的實體。這些實體中的每一個都可以訪問屬性,如在 attr_accessor 中的類定義下指定的名稱和位置。您可以更改最后一條陳述句 ( return tracks) (注意return這里不需要,因為它是方法中的最后一條陳述句,默認情況下將在 ruby?? 中回傳最后一條陳述句)。
試試這個而不是 return tracks
tracks.map{ |track| {track_name: track.name, track_location: track.location} }
這是你最終會得到一個帶有track_name和track_location鍵的哈希陣列,每個鍵都包含一個軌道的值。我不確定您要回傳哪種格式,但這是一種相當簡單但靈活的格式。最簡單的方法是陣列陣列,您可以使用它:
racks.map{ |track| [track.name, track.location] }
uj5u.com熱心網友回復:
您正在觀察Object#to_s和 中定義的默認行為Object#inspect。
Ruby 使用該to_s方法將物件轉換為字串,并使用該inspect方法獲取適合除錯的物件的字串表示。默認情況下,to_s和inspect或多或少是一樣的。唯一的區別是inspect還會顯示實體變數。
您可以并且應該在您的Track類中覆寫這些方法。例如:
class Track
def to_s
"#{self.class.name} #{name} @ {location}"
end
def inspect
"#<#{to_s}>"
end
end
track.to_s
puts track
# Track: name @ /music/name.flac
track.inspect
p track
# #<Track: name @ /music/name.flac>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324814.html
上一篇:從動態嵌套陣列生成物件的平面陣列
下一篇:輸入欄位未更新陣列中的“地址”
