语言特性
- Ruby是解释执行的。
- 除了NIL和false 之外其他值都表示true
鸭子类型
- Ruby在大部分时间里都表现的像一门强类型语言。Ruby是在运行时而非编译时进行类型检查(动态类型)。
- 所谓鸭子类型并不关心其内在类型是什么。只要看上去像就可以了。
ruby 类型
- 数组
- 散列表。
代码块和yield
Ruby的一般惯例是代码块只占一行的用大括号,代码块占多行的用doend定义类
Object -> Module -> Class-> Numeric -> Integer -> Fixnum ->4
类一般以大写字母开头,写采用驼峰命名法,实例变量前加@,类变量前必须加上@@
attr
用来定义实例变量和访问变量的同名方法attr_accessor
定义实例变量,访问方法和设置方法。
Ruby使用模块来处理多继承。如果在类中包含了一个模块,那么该模块的行为和常量会成为类的一部分。
问题
- 分别找到用代码块和不用代码块读取文件的方法,用代码块有什么好处
使用代码块:
1 | module ToFile |
不使用代码块:1
2
3f = File.new("text.txt","r")
puts f.gets
f.close
代码块方便调用。
- 如何把散列表转换成数组?数组能转换成散列表吗?
将散列表转换成数组:1
2
3
4animals = {'1'=>'one','2'=>'two'}
#puts animals.to_a
animals = animals.to_a
puts animals[1][1] #print two
数组转换成散列表的:1
2animals = %w[a b c d]
puts Hash[*animals] #print {"a"=>"b", "c"=>"d"}
你能循环遍历散列表吗
1
2animals = {'1'=>'one','2'=>'two'}
animals.each{|x,y| puts "key is #{x},value is #{y}"}Ruby 的 数组还能当做栈用,它还能用作哪些常用的数据结构?
队列
元编程
元编程:写能写程序的程序。
开放类
随时可以改变任何类的定义,常用语添加类的行为。
method_missing
module,模块。
只要某个模块被另一个模块包含,ruby就会调用该模块的include方法。类也是模块。
总结
Ruby的核心优势是它的语法和灵活性,根本的不足之处大概是性能。