因为我用习惯了java,所以一般语法会跟java对比
变量的命名:必须是单个实体(不要包含空格),必须以字母和下划线开头,区分大小写.跟java差别不大
数字与表达式跟java差别不大
1.也会有x+=1的写法,但是不存在x++的写法
2.注意浮点型:10是整型,10.0是浮点型,可以用to_f和to_i互相转换...整形->字符型to_s
3.常量:用大写字母开头 Pi=3.141952,与类命名相似,应为一旦定义就固化
4.文本字符串:String类,单行用""号,多行用%q{},其中{}号可以用<>,()或是自选的两个分界符!!!!!!哇!!!还可以x = <<END_MY_STRING_PLEASE直到你写入 END_MY_STRING_PLEASE,输入字符串才结束,当然END_MY_STRING_PLEASE可以自定义
4-1.字符串表达式,有+号,*号(复制N次),<,>,==(比较acsii码,?A转为acsii码,65.chr转为字符),我把字符串转化为数组,不就可以减咯~哇哈哈~
4-2.插写,在字符串中加入#{...}这样一段代码
4-3.字符串的一般方法:capitalize,downcase,upcase,chop.next.hash.reverse
4-4.正则表达式...................................专门给一章讲述
5.数组
定义一个基本数据x = [1,2,3,4,5],;另外数组的不需要预定义空间 x=[],不限定类型
数组插入末尾:<<操作符,或用方法push()
数组弹出元素:使用pop方法
数组->字符串:如果数组包含字符元素,可以用join合唱一个大字符串 x=["a","b","c"] x.join->"abc" ,可以接受一个参数隔断每个元素x.join(', ')->"a, b, c"
字符串->数组:"huang zi hao".scan(/\w/)可以获取一个以一个字符为元素的数组
不扫面分切,可以用split,另外几乎所有内置类都有inspect方法将对象文本化表示"huang zi hao".split(/s+/).inspect
数组迭代:可以用each,collect或者传统的while...end ep: [1,2,3,4].each{|element| puts("the number is:"+element.to_s)}
发现循环都可以用 |element| 获得迭代子
数组操作:+ , - , .empty? , .include?(xxx) , .first , .last(.first , .last可以指定参数) , .reverse反序 (记住inspect)
6.散列表
就是个键值对嘛,可以是任何对象哦~
dictionary = { 'cat' => 'feline animal' , 'dog' => 'canine animal' }
puts dictionary[ 'cat' ]
循环: dictionary.each{ |key,value| .......}
操作:检索x.keys.inspect,删除x.delete("key"),有条件删除x.delete_if{ |key,value| ....}
7.时间对象Time
控制结构
1.写个奇怪的比较语法puts "you are too young" if age<18 ,比较操作只有<=>特别点(x<=>y,x大1,y大-1,相等0),还可以用连接符 "&&" "||"
与if相反的是unless,另外age.between?(12,18)这类的方法,以后将会学到相关类的函数
来个正常点得写法
if age<18
......//插入多行操作吧~~~~
[elseif]
[else]
exit
end
2.三目运算符 XX ? XX : XX
3.case .... when...... when.... else
4.while ... end
5.util ... end
6.代码块 do.......end 或 {}
可以自己编写方法,处理代码块
7.循环的语法也很不同 5.times do puts("Test") end,倒是do...end有点亲切感,然而也可以用{}代替do..end,但是一般单行用{},多行用do..end
除了这个,还有1.upto(5){ |number| ......................}//number是用来获取迭代计算器的值(名字随便起)
10.downto(5)do |number|.....................end
0.step(50,5){|number|....................}//从0到50,每步递进5
循环没for爽啊......
8.范围
('a’..'z')/(1..3)可以用to_a转化为数组
a=[1,2,3,4,5,6,7,8,9]
puts a[1..3].inspect
9.符号http://zarknight.iteye.com/blog/126414
符号不包含值或对象,不象变量一样,而是用作代码中固定的名字。符号不会创建新对象,只是值的引用
用在散列表更有用:
person1={ :name => "Fred" , :age => 20 , :gender => :male}
person2={ :name => "Fred1" , :age => 21 , :gender => :male}
1:是Symbol类的实例
2: 是名称的对象
3:符号是不可改变的字符串,也不可被GC的
4:在大多数情况下,接受符号作为参数的方法也能接受字符串,反过来不成立;
5:用符号要比用字符串省内存
6:每个符号在对象空间中只出现一次:和Fixnum一样,都存为直接值
7:有意思的Symbol#to_proc
ri Symbol 可看究竟