Skip to content

Instantly share code, notes, and snippets.

@satoshin2071
Created January 31, 2013 08:52
Show Gist options
  • Save satoshin2071/4681424 to your computer and use it in GitHub Desktop.
Save satoshin2071/4681424 to your computer and use it in GitHub Desktop.
Enumerableをincludeして独自に使うときのおさらいメモ
Enumerableのメソッドは全てeachを用いて定義されているのでincludeしたらeachを適切に定義してやる必要がある。
[1] pry(main)> class Account
[1] pry(main)* attr_accessor :name, :balance
[1] pry(main)* def initialize(name, balance)
[1] pry(main)* @name = name
[1] pry(main)* @balance = balance
[1] pry(main)* end
[1] pry(main)*
[1] pry(main)* def <=>(other)
[1] pry(main)* @balance <=> other.balance
[1] pry(main)* end
[1] pry(main)* end
=> nil
[2] pry(main)> class Portfolio
[2] pry(main)* include Enumerable
[2] pry(main)*
[2] pry(main)* def initialize
[2] pry(main)* @accounts = []
[2] pry(main)* end
[2] pry(main)*
[2] pry(main)* def each(&block)
[2] pry(main)* @accounts.each(&block)
[2] pry(main)* end
[2] pry(main)*
[2] pry(main)* def add_account(account)
[2] pry(main)* @accounts << account
[2] pry(main)* end
[2] pry(main)* end
=> nil
[3] pry(main)> account1 = Account.new('account1',1000)
=> #<Account:0x1019c95f8 @balance=1000, @name="account1">
[4] pry(main)> account2 = Account.new('account2',5000)
=> #<Account:0x1019b8780 @balance=5000, @name="account2">
[5] pry(main)> account3 = Account.new('account3',3000)
=> #<Account:0x1019a7e80 @balance=3000, @name="account3">
[6] pry(main)> account4 = Account.new('account4',4000)
=> #<Account:0x101997940 @balance=4000, @name="account4">
[7] pry(main)> portfolio = Portfolio.new
=> #<Portfolio:0x1019821a8 @accounts=[]>
[8] pry(main)> portfolio.add_account(account1)
=> [#<Account:0x1019c95f8 @balance=1000, @name="account1">]
[9] pry(main)> portfolio.add_account(account2)
=> [#<Account:0x1019c95f8 @balance=1000, @name="account1">,
#<Account:0x1019b8780 @balance=5000, @name="account2">]
[10] pry(main)> portfolio.add_account(account3)
=> [#<Account:0x1019c95f8 @balance=1000, @name="account1">,
#<Account:0x1019b8780 @balance=5000, @name="account2">,
# #<Account:0x1019a7e80 @balance=3000, @name="account3">]
[11] pry(main)> portfolio.add_account(account4)
=> [#<Account:0x1019c95f8 @balance=1000, @name="account1">,
#<Account:0x1019b8780 @balance=5000, @name="account2">,
# #<Account:0x1019a7e80 @balance=3000, @name="account3">,
# #<Account:0x101997940 @balance=4000, @name="account4">]
portfolioが保持しているAccountインスタンスの中で@balanceの値が2000より大きいものはあるか?
[13] pry(main)> p portfolio.any?{|account|account.balance > 2000}
true
=> nil
portfolioが保持しているAccountインスタンスの@balanceの値は全て2000より大きいか?
[14] pry(main)> p portfolio.all?{|account|account.balance > 2000}
false
=> nil
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment