Sunday, November 15, 2009, 5:59:31 AM, you wrote: d> sorry just was learning ruby so have some low level questions, :) d> in this statement: d> 1.upto(10) do |c| print c," " end d> what's the usage of "| ... |" in ruby? can't easily understand. d> Thanks. I'm just learning Ruby, too .. and I found this fairly tough to wrap my head around. This is what I think I know: Almost EVERYTHING in Ruby is an object. Thus the "1" in "1.upto(10)" is an object. Object have methods that can be applied to them. Or, equivalently, objects can have messages sent to them. "upto" is method that can be applied to the integer 1. "upto" tokes an argument "10". - - - Now here's where I get vaguer. "upto" is a method that, in turn, can call subroutines. One of the subroutines it can call is ... do |c| print c," " end The object.method known as 1.upto(10) will call the subroutine do |c| print c," " end ten times. Each time it calls do |c| print c," " end it will pass a parameter to the subroutine. In this case it will pass 1 the first time, 2 the second time ... 10 the last time. The subroutine do |c| print c," " end will see that parameter as c Thus, the subroutine do |c| print c," " end has to know a fair bit about the method "upto" in order to know what "upto" will pass to the subroutine. That is, it has to know a fair bit about the public interface of "upto" and what "upto" is supposed to do. Internal implementation of "upto" is, of course, nearly irrelevant. Like in most high level languages, the names of the parameters and the arguments do not have to be the same. Thus, do |c| print c," " end is exactly equivalent to do |parm| print parm," " end I hope this helps.