概要
RubyでArrayやHashを管理するクラスを定義する場合にはEnumerableモジュールをincludeしたクラスを作ると each などの見慣れたメソッドを独自のコレクションクラスで簡単に使うことができるようになります
他の情報を見るとEnumerableは使わないほうが良いという記事もあるのでご利用は自己責任でお願いします
環境
- Ruby 3.1.2
サンプルコード
ポイントは each メソッドをオーバライドする点です
- vim app.rb
class Users
include Enumerable
def initialize(users)
@users = users
end
def each
@users.each do |user|
yield(user) if block_given?
end
end
def names
@users.map{|user|user.name}
end
end
class User
attr_reader :name, :age
def initialize(name:, age:)
@name = name
@age = age
end
end
users = Users.new(
[
User.new(name: "hawk", age: 10),
User.new(name: "snowlog", age: 20),
User.new(name: "taro", age: 30),
]
)
p users.names
動作確認
- ruby app.rb
["hawk", "snowlog", "taro"]
0 件のコメント:
コメントを投稿