Menu
CoddyTech

回顾:联系人列表

本课属于 Coddy Ruby 学习旅程的“面向对象编程”单元。第 11 课,共 57 课。

challenge icon

挑战

中等

完成 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 在线编译器