Ruby是一门面向对象的脚本语言。
Ruby On Rails简称为RoR或Rails,是按照MVC结构开发的开源网络应用框架。设计原则:Don't repeat yourself和Conventions over Configuration
RubyGems是Ruby语言的包管理工具。
学习资料:
http://guides.ruby-china.org/getting_started.html
http://www.runoob.com/ruby/ruby-tutorial.html
http://ruby-doc.org/
《Ruby on Rails Web开发学习实录》
开发环境 window7 64 bit
1.下载rubyinstaller-3.0.0.exe
http://rubyinstaller.org/
安装后自带的RubyGems, Rails 和SQLite3
命令行输入 ruby -v 和Rails --version 检查是否安装成功。
2.按照教程里的新建一个项目时,会由于网络原因下不下来gem,于是,找到万能的淘宝镜像:
https://ruby.taobao.org/
3. 安装Ruby的IDE RadRails
http://www.aptana.com/products/radrails/download.html
4. Ruby基础语法学习
例:最简单的计算器:
if __FILE__ == $0 # TODO Generated stub puts "please input number 1:" number1=gets puts "please input an operator:" op=gets puts "please input number 2:" number2=gets case op.chomp when "+" result=number1.to_i+number2.to_i when "+" result=number1.to_i+number2.to_i when "+" result=number1.to_i+number2.to_i when "+" result=number1.to_i+number2.to_i end puts "Result:#{number1.chomp}#{op.chomp}#{number2.chomp}=#{result}" end
gets返回包含用户输入值的一行字符串,chomp去掉尾部的换行符。
4.1 变量
注意:方法名也是由小写字母或下划线开头,如果没有参数的话,方法名后的括号可以省略,所以必须弄明白调用的是方法还是局部变量。
@
开头:实例变量(Instance variable)。@@
开头:类变量(Class variable)类变量被共享在整个继承链中4.2 数据类型
在Ruby中,基本数据类型也是对象。
Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash。
range类型:
if __FILE__ == $0 # TODO Generated stub a=0..59 b=60...100 c=b.to_a puts "minimum a: "+(a.min).to_s puts "maxmum: b: "+(b.max).to_s puts "end a : "+(a.end).to_s puts "first b : "+(a.first).to_s puts b.include?100 puts "c.length="+(c.size).to_s end
输出:
minimum a: 0
maxmum: b: 99
end a : 59
first b : 0
false
c.length=40
范围迭代器:
if __FILE__ == $0 # TODO Generated stub count=10..20
alphabet="A".."J" print count.reject{|i|i<15} puts "\n" print count.select{|i|i<15} puts "\n" count.each do|i| puts i.to_s end end #输出: [15, 16, 17, 18, 19, 20] [10, 11, 12, 13, 14] 10 11 12 13 14 15 16 17 18 19 20
符号类型:
符号对象是一个字符串、一个方法、一个类或者一个标识符的内部表现形式,在对象名前加一个冒号:就行了。
if __FILE__ == $0 # TODO Generated stub dcy="我是女生" ly=:"我是女生" dcyandly=%s{dcy} #比较内容 puts dcy.to_sym==ly puts ly.to_s==dcy #比较对象 puts ly==dcyandly end #输出 true true false
数组类型
组字面量通过[]中以逗号分隔定义,且支持range定义。
if __FILE__ == $0 # TODO Generated stub #创建或初始化数组 names=Array.new names2=Array.new(20) names3=Array.new(4,"mac") nums=Array.new(10) {|e| e=e*2} nums2=Array.[](1,2,3,4,5) nums3=Array[1,2,3,4,5] digits=Array(0..9) num=digits.at(6) puts names2.size puts names2.length puts "#{names3}" puts "#{nums}" puts "#{digits}" puts "#{num}" end 输出: 20 20 ["mac", "mac", "mac", "mac"] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 6
哈希类型
哈希是在大括号内放置一系列键/值对,键和值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。Hash 的元素没有特定的顺序。 如果顺序很重要的话就要使用数组了。
if __FILE__ == $0 # TODO Generated stub months=Hash.new months=Hash.new("month") H=Hash["a"=>100,"b"=>200] keys=H.keys puts "#{months[0]}" puts "#{months[72]}" puts "#{H['a']}" puts "#{keys}" end 输出: month month 100 ["a", "b"]
4.3 运算符和赋值
表达式与常量比较时用===
if __FILE__ == $0 # TODO Generated stub p=2 p**=2 score=600 puts p.to_s puts 5<=>8 puts 5<=>5 puts 8<=>5 puts (1..10)===9 puts "我是誰"==="誰是我" s=score<100?"yes":"no" puts s end 输出: 4 -1 0 1 true false no
if __FILE__ == $0 # TODO Generated stub #并行赋值 c,d =12,21 c,d=d,c puts c,d # 嵌套赋值 weather=["春","夏","秋","冬"] b,(c,d),e=weather puts b.to_s,c.to_s,d.to_s,e.to_s puts "\n" b,(c,*d),e="春",["夏","秋","不冷不热"],"冬" puts b.to_s,c.to_s,d,e.to_s en 输出: 21 12 春 夏 秋 春 夏 秋 不冷不热 冬
4.4 条件语句
if..elsif..else..end
if.. then..end
case expression [when expression [, expression ...] [then] code ]... [else code ] end
4.5 循环语句
while..do ..end
for..in..do ..end
跳转语句:break---跳出当前循环
next---跳出本次循环,进入下一个循环
redo---跳出本次循环执行下一次循环,但是不简称循环条件是否成立
return----结束方法,并有返回值
if __FILE__ == $0 # TODO Generated stub for x in 1..9 for y in 1..x if x==y print y,"X",x,"=",x*y,"" puts "" else print y,"X",x,"=",x*y," " end end end end 输出: 1X1=1 1X2=2 2X2=4 1X3=3 2X3=6 3X3=9 1X4=4 2X4=8 3X4=12 4X4=16 1X5=5 2X5=10 3X5=15 4X5=20 5X5=25 1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36 1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49 1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64 1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
if __FILE__ == $0 # TODO Generated stub i=1 while i<5 do if(i==5) i+=1 redo end puts i.to_s i+=1 end end 输出: 1 2 3 4