From: Erwin Abbott Date: 2007-06-30T05:17:27+09:00 Subject: Syntax sugar: method[](...) => method(...) 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). Lastly, has there been any mention of allowing function names like so in ruby 1.9: def logins[] date # ... end Thanks, - Erwin