<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-3466723300364899720.post4607665665916970385..comments</id><updated>2011-11-04T04:35:36.075-04:00</updated><category term='ruby'/><category term='gender'/><category term='ood'/><title type='text'>Comments on Sandi Metz: Ruby case statements and kind_of?</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sandimetz.com/feeds/4607665665916970385/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html'/><author><name>Sandi Metz</name><uri>http://www.blogger.com/profile/13364323780338797977</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-DpVpPSW2Guw/TzEhPNc7skI/AAAAAAAAAYI/ABtohVAnlNg/s220/me_twitter_broader.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-2731976064841397217</id><published>2011-11-04T04:35:36.075-04:00</published><updated>2011-11-04T04:35:36.075-04:00</updated><title type='text'>NIce article, and yes I dont yet feel it in my bon...</title><content type='html'>NIce article, and yes I dont yet feel it in my bones. I guess need to really believe in what i am doing.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/2731976064841397217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/2731976064841397217'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1320395736075#c2731976064841397217' title=''/><author><name>Pankaj Doharey</name><uri>http://www.blogger.com/profile/12590695105739765705</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-554079458'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-4813683417104929419</id><published>2011-11-04T04:33:50.618-04:00</published><updated>2011-11-04T04:33:50.618-04:00</updated><title type='text'></title><content type='html'>This comment has been removed by the author.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/4813683417104929419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/4813683417104929419'/><author><name>Pankaj Doharey</name><uri>http://www.blogger.com/profile/12590695105739765705</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.contentRemoved' value='true'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-554079458'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-8573050982428627236</id><published>2009-07-07T15:30:45.522-04:00</published><updated>2009-07-07T15:30:45.522-04:00</updated><title type='text'>Technically, you&amp;#39;re not dealing with a double-...</title><content type='html'>Technically, you&amp;#39;re not dealing with a double-dispatch problem here.  Double dispatch occurs when you have TWO objects which should determine which implementation of a method to call; &amp;quot;double&amp;quot; only depends on the type of its receiver (since it has no arguments).&lt;br /&gt;&lt;br /&gt;The &amp;quot;CollideWith&amp;quot; method in the Wikpedia article is a double-dispatch issue because to know which one of the four implementations to call, you need to examine BOTH the type of the asteroid AND and the type the spaceship.  C++ (and Java and Ruby) cannot do this on its own; it&amp;#39;ll handle a dispatch on the receiving object, but in the general cases, the programmer will have to handle dispatching on the argument.&lt;br /&gt;&lt;br /&gt;That being said, the visitor pattern IS a solution for this &amp;quot;double&amp;quot; method, and all the issues raised here are perfectly valid.  It&amp;#39;s just not technically a double-dispatch issue.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/8573050982428627236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/8573050982428627236'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1246995045522#c8573050982428627236' title=''/><author><name>Jeremy D. Frens</name><uri>http://www.blogger.com/profile/13179698525098485533</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_7fOA1sUkarU/SFvGdEzS1-I/AAAAAAAAAAM/51V3Y4gGrwg/S220/me.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-14253258'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-6925366243602018102</id><published>2009-06-20T18:10:02.533-04:00</published><updated>2009-06-20T18:10:02.533-04:00</updated><title type='text'>@Aaron, modifying core classes in gems is somethin...</title><content type='html'>@Aaron, modifying core classes in gems is something I&amp;#39;m cautious of, but in application code I do it regularly without incident. And don&amp;#39;t forget that Ruby gives us the option of modifying an individual object, limiting the potential scope for error even further.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/6925366243602018102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/6925366243602018102'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245535802533#c6925366243602018102' title=''/><author><name>feyeleanor</name><uri>http://feyeleanor.livejournal.com/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1790908147'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-7315959619878097316</id><published>2009-06-18T12:27:58.563-04:00</published><updated>2009-06-18T12:27:58.563-04:00</updated><title type='text'>Naming collisions don&amp;#39;t come up nearly as ofte...</title><content type='html'>Naming collisions don&amp;#39;t come up nearly as often as critics suggest.&lt;br /&gt;&lt;br /&gt;You could avoid reopening these classes if you wanted to, wrapping them with an object that implements double and then delegates the rest to the original object.&lt;br /&gt;&lt;br /&gt;Anyway, the principle at work here is the Open-Closed principle.  With the original case-based implementation, if you want to extend the behavior by adding a new type, you would have to modify the original code.  Bad.&lt;br /&gt;&lt;br /&gt;Nice post :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/7315959619878097316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/7315959619878097316'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245342478563#c7315959619878097316' title=''/><author><name>Pat Maddox</name><uri>http://www.blogger.com/profile/08736213150610301698</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-324953442'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-1992277838803787532</id><published>2009-06-17T13:51:40.755-04:00</published><updated>2009-06-17T13:51:40.755-04:00</updated><title type='text'>Hopefully.  I could be wrong.  ;-)

Here is a simp...</title><content type='html'>Hopefully.  I could be wrong.  ;-)&lt;br /&gt;&lt;br /&gt;Here is a simplified implementation of the double dispatch / visitor pattern I typically use:&lt;br /&gt;&lt;br /&gt;http://gist.github.com/131378&lt;br /&gt;&lt;br /&gt;When it calls &amp;quot;send&amp;quot;, it&amp;#39;s still examining the type in order to figure out which method to dispatch.  IIRC, if I was doing this in Java, I would have to implement a &amp;quot;visit&amp;quot; method for each type I expect to receive.  In ruby I cheat by using the class name in the method call, but I&amp;#39;m still asking the object for it&amp;#39;s type.&lt;br /&gt;&lt;br /&gt;Are we talking about the same thing?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/1992277838803787532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/1992277838803787532'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245261100755#c1992277838803787532' title=''/><author><name>Aaron</name><uri>http://www.blogger.com/profile/13090795422716976149</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1578293407'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-1206514317403739806</id><published>2009-06-17T13:38:02.620-04:00</published><updated>2009-06-17T13:38:02.620-04:00</updated><title type='text'>Hmm, I see double-dispatch as &lt;i&gt;avoiding&lt;/i&gt; the ...</title><content type='html'>Hmm, I see double-dispatch as &lt;i&gt;avoiding&lt;/i&gt; the problem of having to examine the type of any object.  Are we talking about the same thing?  Can you post an example to help me understand what you&amp;#39;re saying?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/1206514317403739806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/1206514317403739806'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245260282620#c1206514317403739806' title=''/><author><name>Sandi Metz</name><uri>http://www.blogger.com/profile/13364323780338797977</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1574250197'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-3803533527044458442</id><published>2009-06-17T13:27:51.573-04:00</published><updated>2009-06-17T13:27:51.573-04:00</updated><title type='text'>Yes.  I use double dispatch heavily for writing vi...</title><content type='html'>Yes.  I use double dispatch heavily for writing visitors, usually when dealing with ASTs.  It would be nice if all objects had an &amp;quot;accept&amp;quot; method for doing this pattern.  The only problem is, we have to examine the type, and isn&amp;#39;t that what we&amp;#39;re trying to avoid?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/3803533527044458442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/3803533527044458442'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245259671573#c3803533527044458442' title=''/><author><name>Aaron</name><uri>http://www.blogger.com/profile/13090795422716976149</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1578293407'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-1364677483297875521</id><published>2009-06-17T12:57:39.726-04:00</published><updated>2009-06-17T12:57:39.726-04:00</updated><title type='text'>Smalltalk has a pattern which allows adding this k...</title><content type='html'>Smalltalk has a pattern which allows adding this kind of behavior while avoiding method naming collisions.&lt;br /&gt;&lt;br /&gt;It&amp;#39;s called &lt;a href="http://www.mimuw.edu.pl/~sl/teaching/00_01/Delfin_EC/Patterns/DoubleDispatch.htm" rel="nofollow"&gt;double-dispatch&lt;/a&gt; and basically it involves creating somewhat ugly, but unique, method names by using a namespace (usually something about the original receiver) to make the method names unique.&lt;br /&gt;&lt;br /&gt;The technique is used extensively in Smalltalk.  It works.  I&amp;#39;d like to think we can use it in Ruby to make our code more OO and save us some pain.&lt;br /&gt;&lt;br /&gt;Would some form of double-dispatch solve the problem you see?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/1364677483297875521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/1364677483297875521'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245257859726#c1364677483297875521' title=''/><author><name>Sandi Metz</name><uri>http://www.blogger.com/profile/13364323780338797977</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1574250197'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-5889619403095504012</id><published>2009-06-17T12:39:33.591-04:00</published><updated>2009-06-17T12:39:33.591-04:00</updated><title type='text'>Name collisions in particular.  To me, adding meth...</title><content type='html'>Name collisions in particular.  To me, adding methods to core classes is like modifying a global variable.  It&amp;#39;s especially painful when your implementation of &amp;quot;double&amp;quot; doesn&amp;#39;t agree with mine.  Take your modification of the Array class for example.  Array responds to &amp;quot;*&amp;quot;, so it may be perfectly reasonable to think that the implementation of Array#double would be &amp;quot;self * 2&amp;quot;.  Which one is right?  IMHO, neither should be added.&lt;br /&gt;&lt;br /&gt;Take it one step further.  What if I packaged my implementation of Array#double in a gem, and my gem depended on that functionality but you didn&amp;#39;t know that!  Redefining that method could have unexpected results.  A prime example of this problem would be the native YAML gem vs. ActiveSupport&amp;#39;s YAML generator.  They both extend core classes, and have slightly different API&amp;#39;s.  Because of that do not play nicely together at all.&lt;br /&gt;&lt;br /&gt;Switching on class type seems like a hack because we really should be duck typing, but extending core classes seems dangerous.  Unfortunately I don&amp;#39;t have a &amp;quot;good&amp;quot; solution.  Subclasses or module extension maybe?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/5889619403095504012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/5889619403095504012'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245256773591#c5889619403095504012' title=''/><author><name>Aaron</name><uri>http://www.blogger.com/profile/13090795422716976149</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1578293407'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-5326607795996926842</id><published>2009-06-17T12:15:48.665-04:00</published><updated>2009-06-17T12:15:48.665-04:00</updated><title type='text'>@Aaron Can you articulate why you feel that pain? ...</title><content type='html'>@Aaron Can you articulate why you feel that pain?  Fear of method naming collisions, or something else?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/5326607795996926842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/5326607795996926842'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245255348665#c5326607795996926842' title=''/><author><name>Sandi Metz</name><uri>http://www.blogger.com/profile/13364323780338797977</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1574250197'/></entry><entry><id>tag:blogger.com,1999:blog-3466723300364899720.post-6439813683540781260</id><published>2009-06-17T12:14:02.729-04:00</published><updated>2009-06-17T12:14:02.729-04:00</updated><title type='text'>Arg!  I completely agree with you, but it pains me...</title><content type='html'>Arg!  I completely agree with you, but it pains me to see methods added to core classes.  Unfortunately, in this case, I can&amp;#39;t think of a better way.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/6439813683540781260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3466723300364899720/4607665665916970385/comments/default/6439813683540781260'/><link rel='alternate' type='text/html' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html?showComment=1245255242729#c6439813683540781260' title=''/><author><name>Aaron</name><uri>http://www.blogger.com/profile/13090795422716976149</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://sandimetz.com/2009/06/ruby-case-statements-and-kindof.html' ref='tag:blogger.com,1999:blog-3466723300364899720.post-4607665665916970385' source='http://www.blogger.com/feeds/3466723300364899720/posts/default/4607665665916970385' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1578293407'/></entry></feed>
