How do I exit from a block

base_dir = “C:/pde”

def list base_dir
d= Dir.new base_dir
d.each {|x|
return “asd” if x.eql? “.”
return “asd” if x.eql? “…”
puts “Got #{x}”
full_name = base_dir+"/"+x
if(File.directory?(full_name))
list full_name
end
}
end

puts ( list base_dir)

The return inside the block in the “list” method actually return from
the “list” method itself. But i just wanted to exit the block. how does
one exit from a block in ruby?

please advise.

Alle martedì 13 novembre 2007, Jigar G. ha scritto:

  list full_name

please advise.
You should use break instead of return.

Stefano

2007/11/13, Jigar G. [email protected]:

  list full_name
end

}
end

puts ( list base_dir)

Why do you use “puts” here? As far as I can see you do the printing in
#list.

The return inside the block in the “list” method actually return from
the “list” method itself. But i just wanted to exit the block. how does
one exit from a block in ruby?

please advise.

Not exactly the answer you were looking for, but…

15:21:46 /$ ruby -r find -e ‘Find.find(“/tmp”) {|f| puts f}’
/tmp
/tmp/uscreens
/tmp/uscreens/S-rklemme
/tmp/4052
/tmp/4052/sshlog
/tmp/4052/servicelog
/tmp/4052/runlog
/tmp/4052/keylog
/tmp/.X11-unix
/tmp/.X11-unix/X0

Cheers

robert

def list base_dir, prefix
Dir.foreach(base_dir){|file|
if (file.eql? “.” or file.eql? “…”)
puts “break dosent work either”
break
end

# this if is the only solution i found, but its ugly.
if !(file.eql? "." or file.eql? "..")
  puts "Got #{prefix+file.gsub(/.java$/,"")}" if file =~ /.*\.java$/
  full_name = base_dir+"/"+file
  if(File.directory?(full_name))
    list full_name, prefix+file+"."
  end
end

}
end

list “c:/java/”, “”

break not only exited the block but also prevented execution with the
next file in the directory, break actually broke the foreach loop
entirely, I just wanted something like continue :slight_smile:
please advise.

I am trying to recurse all directories and find certain type of files.

Stefano C. wrote:

Alle martedì 13 novembre 2007, Jigar G. ha scritto:

  list full_name

please advise.
You should use break instead of return.

Stefano

Robert K. wrote:

15:21:46 /$ ruby -r find -e ‘Find.find("/tmp") {|f| puts f}’
/tmp
/tmp/uscreens
/tmp/uscreens/S-rklemme
/tmp/4052
/tmp/4052/sshlog
/tmp/4052/servicelog
/tmp/4052/runlog
/tmp/4052/keylog
/tmp/.X11-unix
/tmp/.X11-unix/X0

Cheers

robert

Find look intresing, will solve my problem, thanks.

But I still need a way to exit from a block :slight_smile:

Thanks a lot, this is so cool, how did I miss it

my code has reduced to

Dir[“C:/pde/cvshome/trunk/OBox//src/core//.java"].each{|f|
file = f.gsub(/.
/src/core//,”“)
file = file.gsub(”/“,”.“)
file = file.gsub(/.java$/,”")
puts file
}

Any way to shorten it further??

Damien M. wrote:

On Tue, Nov 13, 2007 at 11:23:00PM +0900, Robert K. wrote:

if(File.directory?(full_name))

/tmp/uscreens/S-rklemme
/tmp/4052
/tmp/4052/sshlog
/tmp/4052/servicelog
/tmp/4052/runlog
/tmp/4052/keylog
/tmp/.X11-unix
/tmp/.X11-unix/X0

Or even

Dir[“/tmp/**/*”]

see class Dir - RDoc Documentation

Regards,

On Tue, Nov 13, 2007 at 11:23:00PM +0900, Robert K. wrote:

if(File.directory?(full_name))

/tmp/uscreens/S-rklemme
/tmp/4052
/tmp/4052/sshlog
/tmp/4052/servicelog
/tmp/4052/runlog
/tmp/4052/keylog
/tmp/.X11-unix
/tmp/.X11-unix/X0

Or even

Dir[“/tmp/**/*”]

see class Dir - RDoc Documentation

Regards,

2007/11/13, Jigar G. [email protected]:

  full_name = base_dir+"/"+file

next file in the directory, break actually broke the foreach loop
entirely, I just wanted something like continue :slight_smile:
please advise.

That would be “next”. Note that exiting from a block and switching to
the next iteration is something completely different. You asked for
exiting and thusly were correctly referred to “break”.

Cheers

robert

Thanks for clearing that up, I am thoroughly impressed with the ruby
community, best in world. Even professional support is slower.

I am a young convert from java :slight_smile:

Robert K. wrote:

2007/11/13, Jigar G. [email protected]:

  full_name = base_dir+"/"+file

next file in the directory, break actually broke the foreach loop
entirely, I just wanted something like continue :slight_smile:
please advise.

That would be “next”. Note that exiting from a block and switching to
the next iteration is something completely different. You asked for
exiting and thusly were correctly referred to “break”.

Cheers

robert

On Wed, Nov 14, 2007 at 12:03:42AM +0900, Jigar G. wrote:

my code has reduced to

Dir[“C:/pde/cvshome/trunk/OBox//src/core//.java"].each{|f|
file = f.gsub(/.
/src/core//,”")
file = file.gsub("/",".")
file = file.gsub(/.java$/,"")
puts file
}

Any way to shorten it further??

If you want only the name of the file, use

puts File.basename(f, “.java”)

Best,