Ruby在语法上是相当的灵活,它让编程人员不局限于一条路子上。
Ruby的语法问题
======================================================
1.方法调用的时候,括号通常是可选的,一下的几个例子都是可行的:
foobar
foobar()
foobar(a, b, c)
foobar a,b,c
2.我们来看一个表达式x y z,是什么意思?它其实相当于
x(y(z))
3.传递hash作为参数给方法,这样可行么:my_method {a => '111', b => '222'}
不可行!如果方法后面跟大括号,则会被认为是block的开始。所以,这里要加上括号:
my_method({a => '111', b => '222'} )
4.如果方法参数只是一个hash,我们甚至可以省略hash外的大括号:
my_method(a => '111', b => '222')
5.再来看这个:
foobar.345
一看看去,会认为是调用对象foobar的名为345的方法,但这明显是错误的,因为方法名是不能以数字开头的。其实,它的真正含义是调用名为foobar的方法,然后传递0.345作为参数。
6.下面的四个表达式一样么?
x = y + z
x = y+z
x = y+ z
x = y +z
乍一看是一样的,但其实只有前三个的功能是相同的,最后一个,它其实是调用方法y,然后传递的参数是+z。
7.下划线_被认为是小写的,所以,一个以下划线开头的变量名,即使是第二个字母是大写的,如_Abc,也不会被
ruby认为是常量。
8.在if和case语句中的then关键字是可选的。同样,在while和until循环语句中的关键子do也是可选的。
9.问号和感叹号可以作为一个方法名的后缀,但是,在单词的其他位置确是不能用的。如completed?是合法的,
而?completed或其他任何位置都是不合法的。
10.正因为问号可以被用作后缀,所以要注意如下的问题:
x = my_flag ? 23 : 45 # OK
x = my_flag? 23 : 45 # Syntax error
11.=end作为内嵌文档的结束标识,它表示该行是内嵌文档的结束,而不是到该标识结束:
=begin
puts "hello"
puts "world"
=end
和
=begin
puts "hello"
=end puts "world"
是一样的效果。
12.BEGIN,END是完全和begin,end不同的
13.如果字符串连接和方法调用在一起,则字符串连接的优先级要高:
str1 = "First " 'second'.center(20)
str2 = ("First " + 'second').center(20)
str3 = "First second".center(20)
这三个的结果是一样的。
需要注意的
=======================================================================
1.ruby中的字符实际上是整数,没有字符这种数据类型:
'ABC'[0].class #Fixnum
x = "Hello"
y = ?A
print "x[0] = #{ x[0]} \n" # Prints: x[0] = 72
print "y = #y\n" # Prints: y = 65
if y == "A" # Prints: no
print "yes\n"
else
print "no\n"
end
2.ruby中其实没有布尔类型,而是用TrueClass和FalseClass来区分,true和false是这两个类的实例。
另外,像c,c++,java中我们所熟悉的++,--操作符号,在ruby中是没有的。
3.ruby中,变量是没有类型的,只有值才是有类型。
4.大多数的ruby操作符其实是方法
5.loop不是关键字,而是一个方法。
6.&&,||和and,or是有差别的,前者的计算结果趋向于一个表达式,而后者则总是false或true:
print (false || "string1\n") # Prints string1
# print (false or "string2\n") # Syntax error!
print (true && "string3\n") # Prints string3
# print (true and "string4\n") # Syntax error!
print (true || "string5\n") # Prints true
# print (true or "string6\n") # Syntax error!
print (false && "string5\n") # Prints false
# print (false or "string6\n") # Syntax error!
and,or的优先级低于&&,||的优先级:
a = true
b = false
c = true
d = true
a1 = a && b or c && d # &&'s are done first
a2 = a && (b or c) && d # or is done first
print a1 # Prints false
print a2 # Prints true
7.赋值操作符的优先级比and,or高:
y = false
z = true
x = y or z # Line 3: =操作比or操作先执行
print x, "\n" # Prints false
(x = y) or z # Line 5: Same as line 3
print x, "\n" # Prints false
x = (y or z) # Line 7: or is done first
print x, "\n" # Prints true
8. 像以下的while和until不是post-test循环,以下两个是不运行的:
puts "looping" while false
puts "still looping" until true
这样才可以:
begin puts "looping" end while false
begin puts "still looping" end until true
分享到:
相关推荐
The Ruby Way(第2版) <br>The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...
The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!
内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm
《The Ruby Way 第二版》...“《The Ruby Way (第2版)中文版》在阐述元编程(metaprogramming)等方面尤其出类拔萃,而元编程是Ruby最引人注目的方面之一。” ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!
the ruby way the ruby way
the ruby way 2ed. the ruby way 2ed.
the ruby way 是一本学习ruby绝好的教材,才用了"如何解决问题"的方式说明ruby编程.
Ruby中机器学习的实用资源
Ruby on Rails Web开发学习实录 内容简介: 在目前的主流web开发技术中,基于ruby语言的rails框架是做网站开发速度最快的工具。它可以达到j2ee框架开发速度的5~10倍,并且代码量也非常少。另外由于代码量的大幅度...
Ruby基础学习资料:Ruby介绍,环境配置,Ruby语法。
11.5 时间日期the ruby way.rar
TheRubyWay(Ruby之道)英文版 Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.pdf
the ruby way,ruby 入门经典
学习ruby的好帮手,包括ruby on rails 等,有兴趣看看,有助于初学者入门学习
The Ruby Way(处理文件和目录)
Ruby on Rails Web开发学习实录.pdf
ruby中文教程,从基础到深入的让你学习ruby
Ruby Hacking Guide是一本探讨C Ruby实现的...从我个人阅读的感觉来看,第一章对于Ruby语言的介绍是一个非常好的起步教程,把Ruby语言中一些核心点都指了出来。比起我读到过一些Ruby语言教程,这部分的讲解要清晰得多.
很好的ruby学习材料,ruby的入门有点难,比较繁琐,这本书很好的帮助大家开启ruby的大门