Ruby or Rails 学习总结 2

2020-03-30  本文已影响0人  Qo_Tn

Qo_Tn


第三章学习

3.1 创建字符串

  1. String:

    • 单引号或双引号 创建。
    • 单引号字符串 只能进行最少替换。
    • 双引号字符串 对于括起来的字符串能进行更多替换。 例如替换转义字符串和其他特殊字符。
    字符串 含义
    \a 替换成Bell 声所对应的符号
    \nnn nnn表示一个八进制数值,替换成该八进制所对应的字符
    \b 退格符,替换成退格键所对应的字符
    \xnn xnn 表示一个十六进制数值,替换成该十六进制数所对应的字符
    \e 替换Escape键所对应的字符
    \cx 替换成Ctrl+X 组合键所对应的字符,其中x可以是任意键对应的字符
    \C-x 替换成Ctrl+X 组合键所对应的字符,其中x可以是任意键对应的字符
    \n 换行符,替换成一个空行
    \M-x 替换成Alt+X 组合键所对应的字符串,其中x可以是任意键对应的字符
    \r 回车符,替换成一个回车
    \M-\C-x 替换成Ctrl+Alt+X组合键所对应的字符串,其中x可以是任意键对应的字符
    \s 空白符,替换成一个空白字符
    \t 替换成一个Tab键所对应的字符
    \v 替换成一个垂直Tab键所对应的字符
    #{expr} 替换成变量或者表达式expr所对应的值

3.2 操作字符串

  1. String类 和 Sysbol类

    • 这两个类提供了文本功能,通过使用这两个类中的方法可以操作字符串。
    • '+' 合并 两个或两个以上 字符串
    • '<<' 为已有字符串变量永久性地增加另一个字符串。
    • '#{}' 嵌入字符串变量,返回新的字符串
    • 拼接字符串还可以使用乘法运算,即一个字符串复制出相应倍数字符串的链接
    • 内置 replace 方法可以替换字符串中的内容
    • dup、clone 方法 来复制字符串
    • dup 只能复制字符串的内容
    • clone 除了内容以外,还继承了特殊方法、污染(taint)、冻结(freeze)等信息
    • 改变字符串 的 方法
    方法 说明
    capitalize 将字符串首字母转换为大写
    upcase 将字符串中所有的字母转换为大写
    downcase 将字符串中所有的字母转换为小写
    swapcase 将字符串中大写字母转为小写,小写字母转为大写
    strip 去掉字符串中的首尾空格
    Lstrip 去掉字符串中左边的空格
    Rstrip 去掉字符串中右边的空格
    Chop 删除字符串中的最后一个字符
    chomp 删除字符串中的最后的换行符
    reverse 将字符串中反转过来
    • 获取字符和子字符串 用 '[ ]' , '[ ]' 方法的参数是字符的索引,该方法返回一个字符,可以使用ord方法把字符转换为 ASCII 值。为 [ ] 方法添加两个参数,还可以从字符串中获取指定长度的子字符串。
    • 当字符串索引: 正左负右,正0负-1 。
    • '==' 比较是否相等
    • '<=>' 比较字符串的大小 -1 0 1

    例如:

    puts "-------------------------------------------------------------------------- "
    #合并字符串
    a="合并"
    b="字符串"
    c=a+b
    puts c
    puts "-------------------------------------------------------------------------- "
    a<<b   # 为已有的字符窜增加另一个字符串
    puts a
    puts b
    puts "-------------------------------------------------------------------------- "
    puts "#{a}#{b}"
    puts "-------------------------------------------------------------------------- "
    puts "#{a}#{b}"*3
    
    puts "-------------------------------------------------------------------------- "
    #替换字符串
    str="替换的字符串"
    a=str
    str.replace("这里用来替换内容")
    puts str
    puts a
    
    #复制字符串
    str="复制字符串的内容"
    puts str.dup
    puts str.clone
    
    #改变字符串
    str="abcdefgWWW,大写"
    puts str.upcase
        
    #获取字符和子字符串
    str="abcdefgWWW.help"
    puts str[2]
    puts str[7].ord
    puts str[4,5]
    puts str[-3]
    puts str[100]
    #比较字符串
    str="比较字符串,str"
    itzcn="比较字符串,itzcn"
    if str==itzcn
        puts "这两个字符串内容想等"
    else
        puts "这两个字符串内容不相等"
    end
    
    #大小
    puts 'a'.ord                #输出a的ASCII 值
    puts 'b'.ord                #输出b的ASCII 值
    puts 'b'<=>'a'            #比较大小,将返回1
    if ("a">"b")        # 比较大小,将返回false
        puts "a大于b"
    else
        puts "a小于b"
    end
    

3.3 Hash对象

  1. 哈希表时最常用的索引集合之一,用来保存数据
  2. Hash 类似于 Dictionary
  3. 可动态 添加实例

Hash对象 常用的方法:

方法 说明
size() 返回Hash对象的长度
length() 返回Hash对象的长度
include?(key) 判断指定的Hash 对象 是否包含指定的key
has_key?(key) 判断指定的Hash 对象是否包含指定的key
delete(key) 删除Hash 对象中指定key的对应元素
keys() 返回由Hash 对象中全部key组成的数组
values() 返回由Hash对象中全部value 组成的数组

Hash对象 的迭代器方法:

迭代器方法 说明
each 迭代输出Hash对象里面的全部元素(包括key 和 value)
each_key 迭代输出Hash对象里面所有key
each_pair 迭代输出Hash对象里所有key-value对
each_value 迭代输出Hash对象里所有value
#Hash 对象
person={    #创建Hash对象
    "name"=>"Tom",
    "age"=>25,
    "sex"=>"男"
}

puts person

persons=Hash.new    #创建Hash类实例
persons["name"]="Tom"        #添加元素
persons["age"]=25
persons["sexx"]="男"
puts persons

puts persons.size()
puts persons.length()
puts persons.include?("name")
puts persons.has_key?("age")
persons.delete("sexx")
puts persons

puts persons.keys()
puts persons.values()


# Hash 迭代方法
 persons.each do |name|
        p "1#{name}"
 end

p persons.each_key
p persons.each_pair
p persons.each_value

3.4 数组

  1. 数组事数据对象的集合
  2. 带有索引的集合,都是动态的,长度可变
  3. 数组的索引 可以为正数,也可以为负数,正0负-1 原则
  4. 使用size方法来访问数组的长度

将多个空格的字符串转换为数组,使用%w{...}或者%W{...}表示法,这两种表示法功能大致相同。使用大些W的方法,会对内部转义字符和特殊字符进行替换。

方法 说明
unshift() 向数组的头部添加数组元素
push() 向数组的尾部添加数组元素
<< 向数组的尾部添加一个数组元素
shift 向数组头部删除数组元素
pop 向数组的尾部删除数组元素
array[n,m] 截取从索引n开始,长度为m的元素列表,组成新数组
array[n..m] 截取从索引n开始, 到索引m的元素列表(包括索引m的数字元素),组成新数组
array[n...m] 截取从索引n开始,到索引m的元素列表(不包括索引为m的数组元素), 组成新数组

例如:

#数组
food=["大米","小米","黑米","虾米","红米","玉米","粟米"]
p food

food[5]="水果"
p food

food[8]="玉米"
p food

food=Array.new
food[0]="大米"
p food

str=%W{上海\s自来水\s来自\s海上}   #使用%W
str2=%w{上海\s自来水\s来自\s海上}   #使用%w
p str
p str2

#添加删除
food.unshift("小米")
food.push("黑米")
food<<"玉米"

p food

#food.shift
#food.pop
#p food

a=food[1,2]
b=food[1..2]
c=food[1...2]

p a,b,c

food_1=["大米"]
food_2=["小米","香蕉"]
food_1.concat(food_2)
p food_1
p food_2

3.5 类型转换

  1. 类型转换

    方法 说明
    to_s 将获取的对象转换为字符串
    to_i 将获取的对象转换为整数
    to_f 将获取的对象转换为浮点
class Computer              #定义Computer 类
    def initialize(name)        #定义构造函数
        @name=name
    end
    def to_s                    #定义to_s方法
        "电脑型号: #{@name}"
    end
end

computer=Computer.new("方正") #实例化Computer 类
puts computer.to_s          # 调用to_s方法
puts computer                  # 输出car对象


pinpai="诺基亚"
xinghao="5000"
color="紫色"
shangshi_date="2008年5月"
price="410"
sale=0.8

puts "品牌:"+pinpai
p "型号:"+xinghao
p "颜色:"+color
p "上市时间:"+shangshi_date
p "市场价格:"+price
p "优惠价格:"+(price.to_i*sale).to_s

第四章学习

4.1 面向对象

  1. 对象、类、对象的状态、对象的行为、类的关系、对象的消息
  2. 封装、继承、多态

4.2 创建类

  1. 类的定义和使用

    • class 声明 end 结束
    class Animal
    # 这里写类的结构
    end
    
  2. 类中的表达式

    #类的表达式
    class Animal
    puts "这里定义了一个Animal类"
    puts "这里在Animal类中打印了两行文本"
    end
    
  3. self 关键字

    class Animal
        puts self
        puts self.class
        def put 
            puts self
            puts self.class
        end
    end 
    
    a = Animal.new
    a.put
    
  4. 追加类

    • 定义好一个类以后,还可以对其进行追加操作。只要是同名的类,对其进行添加功能。在使用类时,系统会自动将两个或多个同名的类合并使用。
    class Animal
        def put
            p "这是put方法"
        end
    end
    
    class Animal
        def show
            p "这是show方法"
        end
    end
    
    a=Animal.new
    a.put
    a.show    
    
  5. 嵌套类

    • 类中声明另外一个类
    • 嵌套类用‘ :: ’来引用
    class Animal
        class Head
            def put
                puts "这里Head类里的put方法"
            end
        end
    end
    
    h=Animal::Head.new
    h.put
    
  6. 特殊类

    • 在Ruby 中还允许为某个特定的对象追加一些方法和属性,这些方法和属性封装到一个类中直接追加到对象中。这个类没有特定的类名,所以并不能作为普通的类使用,所以我们称其为特殊类。
    class Animal
    #一个空的Animal类
    end
    a=Animal.new
    class <<a
        def put
            puts "这个是特殊类的put方法"
        end
    end
    a.put   
    

4.3 方法

  1. 方法是类中执行其行为的成员,类的所有行为都将以方法的形式来进行执行和处理
  2. 脱离了类,也可以使用方法,不过在没有类的情况下定义的方法我们通常称之为“函数”

方法 如下

def methodName(arg1, arg2, ....argN)
       #方法体
end
  1. 参数可以不用括号来标识,如果省略括号,方法名和参数列表之间需要有空格进行分隔,调用方法时使用的括号也可以省略。
class Animal
   def eat(food)
       puts "这个动物正在吃"+food
   end
end
ani=Animal.new
ani.eat("馒头")
  1. 参数的默认值

    class Dog
        def eat(food="骨头")
                puts "小狗正在吃"+food
        end
    end 
    dog=Dog.new
    dog.eat("肉")
    dog.eat
    
  2. 方法的返回值

    class Dog
        def GetHobi
            "肉"
        end
    
        def GetWeight
            return "12kg"
        end
    end
    
    dog=Dog.new
    
    puts "小狗喜欢吃#{dog.GetHobi}"
    puts "小狗的体重为#{dog.GetWeight}"
    
  3. 特殊方法

    class Dog
        # 一个空的Dog类
    end
    dog=Dog.new
    def dog.show
        puts "我是一个只有12kg体重的小胖狗"
    end
    dog.show
    
  4. 定义类的方法

    • 类方法需要使用 类名 和 点运算符 做为方法名的前缀
    class Dog
        def Dog.show
            puts "我是一只有12kg体重的小胖狗"
        end
    end
    Dog.show
    

4.4 实例变量 和 类变量

  1. 实例变量

    • 实例变量用于在类内部共享数据
    • 声明位置 顶部、顶部方法、类、类方法、模块、模块方法
    • 实例变量 以@开头
    @Name="Tom"
    
    class Cat
        @Color="黄色"
        def init
            @weight="3kg"
        end
        def show
                puts "#@Name 是一只 #@Color 的有#@weight 体重的小懒猫"
        end
    end 
    cat=Cat.new
    cat.init
    cat.show
    
  2. 类变量

    • 位置与实例变量相同
    • 类变量需要 以两个“@”开头
    @@master="张浩华"
    class Cat
        def say
            puts "我是一只小懒猫,我的主人是#@@master"
        end
    end
    class Dog
        def say
            puts "我是一只小笨狗,我的主人是#@@master"
        end
    end
    cat=Cat.new
    cat.say
    dog=Dog.new
    dog.say
    

4.5 属性

  1. 属性对类的外部提供了一个访问 类内部实例变量的接口,我们可以通过它来操作类的实例变量

  2. 属性读取器 和 设置器

    class Person
        def name
            @name
        end
    end
    p=Person.new
    puts p.name
    
  3. 如果要为类的实例变量 追加一个设置器,我们还要为其创建一个设置方法

  4. 设置实例变量值的属性方法比较特殊,命名时需要以等号“=”为后缀,并且必需设置一个方法参数

    class Person
        def name=(val)
            @name=val
        end
    end
    p=Person.new
    p.name="joker"
    
  5. 属性定义标识符

    • 四个标识符: attr 、attr_reader 、 attr_writer 、attr_accessor
    • 四个标识符为内建方法
    class 类名
        attr:attr1,key
        attr_reader:attr1,attr2
        attr_writer:attr1,attr2
        attr_accessor:attr1,attr2
    end
    
    • 这里的 :attr1 是类中实例变量的名称,不过这里要把实例变量名称的前缀at符号“@”换成冒号“:”
    • attr 根据布尔型数据key的值,定义一个可读写的属性。如果key的值为false,则设置属性的访问权限为只读
    • attr_reader 定义一个或多个只读的属性
    • attr_writer 定义一个或多个只写的属性
    • attr_accessor 定义一个或多个可以读写的属性
     class Dog
       attr:name,true
       attr_reader:weight
     end
    

4.6 构造方法

  1. 构造方法是在实例化类时要执行的类的方法,且该方法在创建每一个类的实例的时候都会被调用。

  2. 构造方法 可以接收 0个或多个参数,这样就可以在初始化类的对象的时候 直接为该对象的实例变量设置初始值。

  3. 构造方法的名称统一为 initialize ,也就是说当调用类的 new 方法创建类的实例的时候,系统会自动调用 initialize 方法来初始化该对象。

    class Car
        def initialize(brand,color)
            @brand=brand
            @color=color
        end
        def show
            puts "这是一辆 #@color 的 #@brand 轿车。"
        end
    end
    car=Car.new("BYD","红色")
    car.show
    
    class Pekingese
        def initialize(name,color,hobi)
            @name=name
            @color=color
            @hobi=hobi
        end
        
        def sayHello
                puts "汪汪"
                puts "我是 #@name"
                puts "我是 #@hobi"
        end
        
        attr_accessor :name, :color, :weight, :hobi
    end
    
    dog=Pekingese.new("小强","白色","吃肉")
    puts "这里我们得到一只 #{dog.color} 的小狗,\n让它来给我们打个招呼: \n汪汪 \n我是小强 \n我喜欢吃肉"
    
    dog.sayHello
    

4.7 在方法中使用块

4.8 类的继承

4.9 访问作用域

上一篇下一篇

猜你喜欢

热点阅读