[Rails] Re: Combine if and do in a single line?

2009-05-30 Thread Jonathan Rochkind

Mario Gr wrote:
 Is there a  way to combine if and do into a single line?
 
 items.each do |item| if current_user.admin?
   #do stuff
 end
 
 Thanks!



Freddy Andersen wrote:
 items.each { |item| item.stuff? } if current_user.admin?

Which you actually COULD write like this too, but I'm not sure if it 
would be considered easily readable:

items.each do |item|
   #do stuff
end if current_user.admin?

The {| | } and the 'do' syntaxes are interchangeable in all ways.  More 
of a Ruby question than a Rails one.
-- 
Posted via http://www.ruby-forum.com/.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Talk group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~--~~~~--~~--~--~---



[Rails] Re: Combine if and do in a single line?

2009-05-30 Thread Marnen Laibow-Koser

Jonathan Rochkind wrote:
[...]
 The {| | } and the 'do' syntaxes are interchangeable in all ways.  

Almost.  I've run across a couple of cases where one works and the other 
doesn't -- one creates a Proc and the other doesn't, or something like 
that.  But that's vanishingly rare, and 99 times out of 100, you will 
not go wrong to treat them as interchangeable.

 More 
 of a Ruby question than a Rails one.

Yup.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org
-- 
Posted via http://www.ruby-forum.com/.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Talk group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~--~~~~--~~--~--~---



[Rails] Re: Combine if and do in a single line?

2009-05-30 Thread Frederick Cheung



On May 30, 7:03 pm, Marnen Laibow-Koser rails-mailing-l...@andreas-
s.net wrote:
 Jonathan Rochkind wrote:

 [...]

  The {| | } and the 'do' syntaxes are interchangeable in all ways.  

 Almost.  I've run across a couple of cases where one works and the other
 doesn't -- one creates a Proc and the other doesn't, or something like
 that.  

{} binds more tightly than do..end - in some cases this can lead to
your block being passed to the 'wrong' method:

def foo(x)
  puts foo #{block_given?}
end

def bar
  puts bar #{block_given?}
end

running foo bar {} outputs

bar true
foo false

but running

foo bar do
end

outputs

boo false
foo true

Fred
 But that's vanishingly rare, and 99 times out of 100, you will
 not go wrong to treat them as interchangeable.

  More
  of a Ruby question than a Rails one.

 Yup.

 Best,
 --
 Marnen Laibow-Koserhttp://www.marnen.org
 mar...@marnen.org
 --
 Posted viahttp://www.ruby-forum.com/.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Talk group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~--~~~~--~~--~--~---



[Rails] Re: Combine if and do in a single line?

2009-05-30 Thread Jonathan Rochkind

Frederick Cheung wrote:
 {} binds more tightly than do..end - in some cases this can lead to
 your block being passed to the 'wrong' method:

Interesting, makes sense.

Personally, that's one reason I don't like making method calls without 
parens, or doing anything else that relies on non-obvious 
order-of-evaluation-binding just to save a couple of parens.

foo(  bar {} )
or
foo( bar do
end )

will both do the same thing. Although the latter is kind of weird style, 
if I need a multi-line block for bar, I'd personally just use a 
temporary var instead.

result = bar do
end
foo(result)

But everyone's got their own style, I guess. Of course you COULD use 
{||} with multi-lines too, but it would also be stylistically weird in 
my opinion in that case.

foo bar {|a|
   stuff
   more stuff
   }

That's just weird. And if I DID it, I'd still want to put parens in 
around foo's argument, which would make it even weirder looking.

Jonathan
-- 
Posted via http://www.ruby-forum.com/.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Talk group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~--~~~~--~~--~--~---



[Rails] Re: Combine if and do in a single line?

2009-05-27 Thread Freddy Andersen

items.each { |item| item.stuff? } if current_user.admin?

On May 27, 6:17 pm, Mario Gr rails-mailing-l...@andreas-s.net wrote:
 Is there a  way to combine if and do into a single line?

 items.each do |item| if current_user.admin?
   #do stuff
 end

 Thanks!
 --
 Posted viahttp://www.ruby-forum.com/.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Talk group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~--~~~~--~~--~--~---