Confessions of a Python fanboy

I V ivlenin at gmail.com
Fri Jul 31 07:27:22 CEST 2009


On Thu, 30 Jul 2009 17:57:48 -0400, Luis Zarrabeitia wrote:
> As I understood the question, it was "was wrong in 'for var in
> container' in comparison with ruby's container.each?"
> 
> What's the (semantic) difference between
> 
> for localVar in container:
>     block
> 
> and
> 
> container.each{|localVar| block}

I don't think "each" is a particularly compelling example of Ruby's 
blocks - as you say, it's easily replaceable with a Python for-loop. The 
advantage of Ruby's syntax is that it allows you to define further 
functions that are sort-of like new control structures. So you have 
things like:

File.open('myfile', 'r') do |file|
	while line = file.gets
		puts line
	end
end

Which is like a python's:

with open('myfile', 'r) as f:
	for line in f:
		print f

However, with Ruby, this kind of scoping construct can be added without 
adding new syntax. Another interesting example is the Sinatra web 
framework, which allows you to write a web app with something like:

get '/' do
	"Index page"
end

post '/:name' do 
	"Posted to " + params[:name]
end

Which looks something like a DSL for web apps, but is accomplished solely 
with normal ruby functions. More: http://www.sinatrarb.com/intro.html

Ruby blocks are, fundamentally, syntactic sugar, but they are kind of 
neat.



More information about the Python-list mailing list