Re: Syntax sugar: method[](...) => method(...)
- From: Trans <transfire@xxxxxxxxx>
- Date: Sat, 30 Jun 2007 17:48:52 +0900
On Jun 29, 4:17 pm, "Erwin Abbott" <erwin.abb...@xxxxxxxxx> wrote:
Hi,
The [] method is really handy when you have an object that should
behave like a hash or array. One thing I find myself wishing I could
also do is something like
def logins[](date)
@events.select{|e| e.action == :login and e.date == date}
end
There may be a better way to deal with this example, but this is just
to demonstrate the circumstances where you don't have an array or hash
called logins, but you'd like to be able to use that [] syntax. One
way I though about doing it is
def logins
EventList.new @events.select{|e| e.action == :login}
end
class EventList
def initialize data
@data = data
end
def [] date
@data.select{|e| e.date == date}
end
end
logins[Date.today] # => all logins today from @events
I guess some people might prefer to write a method like
get_logins(date), but I like this syntax. It seems reasonable to also
define []= in EventList to update the original @events. What I'd like
to know is if there's another way to solve this problem, or if there
are any simple optimizations (maybe only keep one instance of
EventList and update its contents with each call to #events).
def logins
@_logins ||= Proc.new do |date|
@events.select{|e| e.action == :login and e.date == date}
end
end
However, I feel you are limiting yourself. Try something like this
instead:
def logins
@_logins ||= (
l = @events.select{|e| e.action == :login}
def l.by_date(date)
select{|e| e.date == date}
end
l
)
end
Then you can use:
logins.by_date(date)
If needed, you could change #logins to lazy evaluate too.
T.
.
- References:
- Syntax sugar: method[](...) => method(...)
- From: Erwin Abbott
- Syntax sugar: method[](...) => method(...)
- Prev by Date: Re: Threads issue.
- Next by Date: Re: [ANN] webgen 0.4.5
- Previous by thread: Re: Syntax sugar: method[](...) => method(...)
- Next by thread: Questions about clusterer 0.1.9 gem
- Index(es):
Relevant Pages
|