七周七语言读书笔记之Ruby

语言特性

  • Ruby是解释执行的。
  • 除了NIL和false 之外其他值都表示true

鸭子类型

  • Ruby在大部分时间里都表现的像一门强类型语言。Ruby是在运行时而非编译时进行类型检查(动态类型)。
  • 所谓鸭子类型并不关心其内在类型是什么。只要看上去像就可以了。

    ruby 类型

  • 数组
  • 散列表。
  • 代码块和yield
    Ruby的一般惯例是代码块只占一行的用大括号,代码块占多行的用doend

  • 定义类
    Object -> Module -> Class-> Numeric -> Integer -> Fixnum ->4

类一般以大写字母开头,写采用驼峰命名法,实例变量前加@,类变量前必须加上@@

attr用来定义实例变量和访问变量的同名方法
attr_accessor定义实例变量,访问方法和设置方法。

Ruby使用模块来处理多继承。如果在类中包含了一个模块,那么该模块的行为和常量会成为类的一部分。

问题

  • 分别找到用代码块和不用代码块读取文件的方法,用代码块有什么好处
    使用代码块:
1
2
3
4
5
6
7
8
9
module ToFile
def filename
"Object_24144260.txt"
end

def ptint_f
File.open(filename, 'r') { |f| puts f.readline }
end
end

不使用代码块:

1
2
3
f = File.new("text.txt","r")
puts f.gets
f.close

代码块方便调用。

  • 如何把散列表转换成数组?数组能转换成散列表吗?
    将散列表转换成数组:
    1
    2
    3
    4
    animals = {'1'=>'one','2'=>'two'}
    #puts animals.to_a
    animals = animals.to_a
    puts animals[1][1] #print two

数组转换成散列表的:

1
2
animals = %w[a b c d]
puts Hash[*animals] #print {"a"=>"b", "c"=>"d"}

  • 你能循环遍历散列表吗

    1
    2
    animals = {'1'=>'one','2'=>'two'}
    animals.each{|x,y| puts "key is #{x},value is #{y}"}
  • Ruby 的 数组还能当做栈用,它还能用作哪些常用的数据结构?
    队列

元编程

元编程:写能写程序的程序。

开放类

随时可以改变任何类的定义,常用语添加类的行为。

method_missing

module,模块。

只要某个模块被另一个模块包含,ruby就会调用该模块的include方法。类也是模块。

总结

Ruby的核心优势是它的语法和灵活性,根本的不足之处大概是性能。