On Mar 19, 3:15 pm, Calamitas <[email protected]> wrote:
> Hey Tom,

> The problem with this syntax, and to me the major problem with this
> technique, is illustrated by the fact that the example as you've shown
> here doesn't work. The & operator actually has the wrong precedence
> for this to work and you have to write this:
>
>   Song.select do |s|
>     (s.artist =~ /Mary/) & (s.year > '1980')
>   end
>
> You could say that this is more readable and good practice etc., but
> in the end it is just plain annoying and easy to forget. Also, having
> to use &, | and ~ instead of &&, || and ! is a big enough problem as
> you'll have a tendency to write the actual boolean operators and doing
> so can lead to weird bugs.

Ah, right. But what's the trade-off? It's either that or a less
intuitive syntax or a great deal more overhead.

What we really need is a way to control precedence.

> I've actually considered a version that is a lot smarter and can work
> with &&, || and !, but I've never gotten around to implementing it.
> The idea was to treat the block as a black box and determine its
> behavior by feeding it different inputs and registering the output.
> Karnaugh maps would then allow you to find a matching expression. In
> the above example with 2 inputs (s.artist and s.year) you'd have to
> test just 4 combinations, but in general with n inputs you need to
> test 2**n combinations, so in practice it can be impractical. Plus it
> will never be perfectly general, and it cannot handle closures.
>
> Nevertheless, I would be interested in seeing this implemented to see
> how usable it is in practice. If you are interested in giving it a
> try, I'll see if I can get the presentation back online because we
> moved our servers to a different hosting company and the link is now
> broken. You can always make it an extension to DataMapper without the
> need for it to be in the official distribution; it can just translate
> to regular DataMapper syntax.

Yes, please. I would be more than happy to see the presentation again
and translate the code into a DataMapper extension. Despite precedence
issues it would still be more intuitive than any of the other
solutions I've seen.

Trans

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to