回顾:联系人列表
本课属于 Coddy Ruby 学习旅程的“面向对象编程”单元。第 11 课,共 57 课。
挑战
中等完成 Contact 类。可以读取 name、email 和 phone。设置器 email= 会将地址转换为小写并保存;如果地址中没有 @,或者 @ 后面没有 .,则会引发 ArgumentError,错误信息为 invalid email: x。设置器 phone= 只保留数字;如果剩下的数字少于 7 位,则会引发 ArgumentError,错误信息为 invalid phone: x。initialize(name, email, phone) 会使用这两个设置器。当两个联系人的电子邮件相同时,它们通过 == 判定为相等。to_s 返回 Ada (ada@mail.io, 5551234)。
提供的代码会按 name,email,phone 的行读取联系人。它会输出 added Ada (ada@mail.io, 5551234);如果某个联系人与已添加的联系人相等,则输出 duplicate ada@mail.io;否则输出错误信息,最后输出 contacts: 2。
你的代码应写在 contact.rb 中。main.rb 包含提供的输入/输出代码,不能编辑。
亲手试试
require_relative 'contact'
# 提供的输入输出代码:保持原样。
input = []
while (line = gets)
input << line.chomp
end
contacts = []
input.each do |line|
name, email, phone = line.split(",")
begin
contact = Contact.new(name, email, phone)
if contacts.include?(contact)
puts "duplicate #{contact.email}"
else
contacts << contact
puts "added #{contact}"
end
rescue ArgumentError => e
puts e.message
end
end
puts "contacts: #{contacts.size}"
面向对象编程中的所有课
自己练习: Ruby 在线编译器