`
zarknight
  • 浏览: 146473 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby way第一章学习【需要记住的一些东西】

阅读更多
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. 像以下的whileuntil不是post-test循环,以下两个是不运行的:
puts "looping" while false
puts "still looping" until true
这样才可以:
begin puts "looping" end while false
begin puts "still looping" end until true



 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics