Issue #6073 has been updated by Shugo Maeda.


Hi,

Shouichi KAMIYA wrote:
> Yes Scala's yield feature in for loop is powerful and it'll be good if we can use that feature in Ruby.
> However, it seems like that for loop feature will be pretty different from current for loop feature right?
> Do you think it's a good idea?

I think it's good to support both each and map/flat_map.
It may be possible to use yield instead of do/;/newline when using map/flat_map.

  # use each
  for i in obj
    ...
  end

  # use map; yield is not a block call
  for i in obj yield
  end

  # use each; yield is a block call
  for i in obj
    yield i
  end
  for i in obj do yield i end
  for i in obj; yield i end

It might be too confusing, though.

----------------------------------------
Feature #6073: Proposal of extending syntax of for loop
https://bugs.ruby-lang.org/issues/6073

Author: Shouichi KAMIYA
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


Hi,

I propose to extend syntax of for loop which allows us to write multiple loop with guard easily.
This extension is inspired by Scala. Here is a example

for i in 1..4 when i % 2 == 0
    j in 5..8 when j % 4 == 0
  puts "#{i}, #{j}"
end

Above code is same as following code.

for i in 1..4
  if i % 2 == 0
    for j in 5..8
      if j % 4 == 0
        puts "#{i}, #{j}"
      end
    end
  end
end

I already implemented this syntax and attached a patch.
What do you think about this syntax guys?

Thank you,
Shouichi


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