[#46930] [ruby-trunk - Bug #6825][Open] forking and pthread_cond_timedwait: Invalid argument (EINVAL) on OS X / 1.9.3-p194 — "xentronium (Mark A)" <markizko@...>

29 messages 2012/08/02

[#46974] [ruby-trunk - Bug #6830][Assigned] test failure test_constants(OpenSSL::TestConfig) [/ruby/test/openssl/test_config.rb:27] on Mac + homebrew — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

17 messages 2012/08/04

[#46975] [ruby-trunk - Bug #6831][Assigned] test_getpwuid() on Mountain Lion — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

12 messages 2012/08/04

[#46996] [ruby-trunk - Bug #6836][Assigned] Improve File.expand_path performance in Windows — "luislavena (Luis Lavena)" <luislavena@...>

15 messages 2012/08/04

[#47036] [ruby-trunk - Feature #6841][Open] Shorthand for Assigning Return Value of Method to Self — "wardrop (Tom Wardrop)" <tom@...>

18 messages 2012/08/07

[#47108] [ruby-trunk - Feature #6852][Open] [].transpose should behave specially — "boris_stitnicky (Boris Stitnicky)" <boris@...>

13 messages 2012/08/10

[#47138] [ruby-trunk - Bug #6861][Open] ERB::Util.escape_html is not escaping single quotes — "spastorino (Santiago Pastorino)" <santiago@...>

14 messages 2012/08/12

[#47163] [ruby-trunk - Bug #6865][Open] GC::Profiler.report might create a huge String and invoke a few GC cycles — "Eregon (Benoit Daloze)" <redmine@...>

9 messages 2012/08/13

[#47189] [ruby-trunk - Feature #6868][Open] Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument — "alexeymuranov (Alexey Muranov)" <redmine@...>

8 messages 2012/08/14

[#47243] [ruby-trunk - Feature #6895][Open] TracePoint API — "ko1 (Koichi Sasada)" <redmine@...>

27 messages 2012/08/20

[#47267] [ruby-trunk - Bug #6903][Open] [[Ruby 1.9:]] --enable-load-relative broken on systems with /lib64 — "mpapis (Michal Papis)" <mpapis@...>

11 messages 2012/08/22

[#47309] [ruby-trunk - Bug #6929][Open] Documentation for Ripper — "zzak (Zachary Scott)" <zachary@...>

16 messages 2012/08/25

[#47345] [ruby-trunk - Feature #6946][Open] FIPS support? — "vo.x (Vit Ondruch)" <v.ondruch@...>

35 messages 2012/08/28

[ruby-core:47193] [ruby-trunk - Feature #6868] Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument

From: "alexeymuranov (Alexey Muranov)" <redmine@...>
Date: 2012-08-14 21:02:29 UTC
List: ruby-core #47193
Issue #6868 has been updated by alexeymuranov (Alexey Muranov).


drbrain (Eric Hodel) wrote:
> =begin
> What would this code do:
> 
>   def method n
>     n = n.times
>     p n
>     n
>   end
> 
> Currently it prints (({#<Enumerator: 3:times>})) and returns an Enumerator.  Would it instead raise SyntaxError for an unexpected end?
> 
> =end

You mean, what should `method(3)` output?  This was not considered in my proposal, i think it should be the same.  In fact, i understand that there are issues with making `def` a method, i was only proposing to make blocks look more like class and method definitions in certain circumstances.  I do not remember if there are Ruby core methods that require a block, all that come to my mind have an optional block parameter.  So here is a made-up example of the use of the proposed syntax:

 def do_three_times(&block)
   3.times(&block)
 end

 do_three_times
   puts "Hi"
 end

The interpreter would need to look up the method definition for `do_three_times` before parsing the parameters (i think this is different from the current behavior), see that there is a required block parameter at the end, and so to expect either `do` or just new line to start the block after `do_three_times`.

----------------------------------------
Feature #6868: Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument
https://bugs.ruby-lang.org/issues/6868#change-28872

Author: alexeymuranov (Alexey Muranov)
Status: Feedback
Priority: Normal
Assignee: 
Category: core
Target version: 3.0


=begin
I propose to make the use of "(({do}))" in block syntax optional if the block is the last argument of a method and if it is a required argument, at least if the block does not take parameters.  (I think this would be in line with how for example the last hash argument is treated.)  I also think that this syntactic change may allow in future versions of Ruby to make (({def})), (({class})), (({module})) methods instead of keywords.

Something like:

 3.time
   puts "Hi!"
 end

instead of

 3.time do
   puts "Hi!"
 end

I know this is not a good example, because for (({#times})) the block argument is optional.
=end



-- 
http://bugs.ruby-lang.org/

In This Thread