ruby - 打印出数组会产生奇怪的输出
问题描述
我有一个数组曲目,它位于另一个称为专辑的数组中。我有以下代码允许用户输入albums[index]
,如果存在,则允许用户输入tracks[index]
. 如果这也存在,则打印出这些索引中存在的专辑和曲目。
但是,当我运行代码时,我没有得到专辑名称和曲目名称,而是得到以下输出:
The selected track is The selected track is #<Track:0x2fca360> #<Album:0x2fca960>
以下是相关的代码片段:
def play_selected_track(albums,tracks)
# ask user to enter ID number of an album in the albums-list
puts "Enter album id:"
album_id = gets.chomp
index = 0
while (index<albums.length)
if (album_id=="#{index}")
puts "Please enter track id:"
track_id = gets.chomp
j = 0
while (j<tracks.length)
if (track_id == "#{j}")
puts "The selected track is " + tracks[j].to_s + " " + albums[index].to_s
end
j += 1
end
end
index += 1
end
end
def main
# fix the following two lines
music_file = File.new("albums.txt", "r")
albums = read_albums_file(music_file)
tracks = read_tracks(music_file)
print_albums(albums)
music_file.close()
play_selected_track(albums,tracks)
end
解决方案
默认#to_s
返回对象的类名和对象id https://apidock.com/ruby/Object/to_s
如果你实现自己的#to_s
方法Tack
,Album
然后你会得到正确的结果。
class Track
def to_s
name
end
end
class Album
def to_s
name
end
end
更好的是#name
显式调用。
puts "The selected track is " + tracks[j].name + " " + albums[index].name
推荐阅读
- android-studio - Gradle - 自动嵌套模块依赖
- gitlab - Gitlab 运行器状态显示“服务未安装”但已安装并成功运行
- ios - Swift为public.mpeg-4定义常量?
- typescript - 为什么 TypeScript 不能在没有明确指定参数类型的情况下工作?
- typescript - Typescript 将 d.ts 捆绑到 1 个带有 tsc 的文件用于 npm 包 - 声明文件错误
- javascript - 试图用ajax插入多选输入
- reactjs - 如何在数据加载时重新呈现自定义挂钩的结果
- c++ - 如果我的结构中有堆分配的成员,我是否必须在堆中分配结构本身?
- atom-editor - 如何比较 2 个 txt 文件的差异并输出到新的 txt 文件
- python - 在具有两个以上处理器组的双套接字系统上通过 ctypes 在 Python 中使用 GetLogicalProcessorInformationEx()