2 基础知识补充

1. 模块

1.1 定义,含混

module ModuleName
    def moduleInfo
        puts "I am a method in Module"
    end 
    def self.moduleInfo2
        puts "类方法成员"
    end
end
class PastInclude
    include ModuleName #混含操作
    def classInfo
        puts "I am a method in class"
    end
end
test=PastInclude.new
test.classInfo
test.moduleInfo
ModuleName.moduleInfo2

I am a method in class
I am a method in Module
类方法成员

1.2 命名空间

module ModulePlace1
    class FirstPlace
        def moduleInfo
            puts "I am in ModulePlace1, I am moduleInfo"
        end
    end
end
module ModulePlace2
    class SecondPlace
        def moduleInfo
            puts "I am in ModulePlace2, I am moduleInfo too"
        end
    end
end
test1=ModulePlace1::FirstPlace.new
test1.moduleInfo
test2=ModulePlace2::SecondPlace.new
test2.moduleInfo

I am in ModulePlace1, I am moduleInfo
I am in ModulePlace2, I am moduleInfo too

2. BEGIN END

  • BEGIN 块是注册初始化,限于该文件的任何语句来执行
  • END 块是注册结束,会在解释器释放文件的时候执行
  • at_exit 块与END 块相似,但执行时间比END晚
BEGIN{
    puts "I am begin 1"
}
BEGIN{
    puts "I am begin 2"
}
BEGIN{
    puts "I am begin 3"
}
at_exit{
    puts "I am at_exit 1"
}
at_exit{
    puts "I am at_exit 2"
}
at_exit{
    puts "I am at_exit 3"
}
END{
    puts "I am end 1"
}
END{
    puts "I am end 2"
}
END{
    puts "I am end 3"
}

I am begin 1
I am begin 2
I am begin 3
I am end 3
I am end 2
I am end 1
I am at_exit 3
I am at_exit 2
I am at_exit 1

3. 导入

3.1 load,require

同一文件夹下创建两个.rb 文件

5Model1.rb

module Module1
    def saySomething
        puts "我只是个Module1中的普通的方法"
    end
    def self.singSong
        puts "我是Module1 中的类方法"
    end
end
Module1.singSong

6Module2.rb

puts "加载Module1...."
load "5Module1.rb" #加载本文件夹中的另一Ruby文件

运行6Module2.rb

加载Module1….
我是Module1 中的类方法

require 不仅可以加载Ruby文件,还可以加载其他语言写的源文件
同一文件夹两Ruby文件:

ModuleA.rb

def moduleA
    puts "I am moduleA"
end

ModleB.rb

require "#{File.dirname(__FILE__)}/moduleA"
moduleA

运行ModleB.rb

I am moduleA

3.2 extend

在类中引入模块,并且将模块中的方法作为类方法

module Module1
    def saySomething
        puts "Hi..."
    end
end
class Man
    extend Module1
end
he=Man.new
#用he.saySomething 会有错误
he.extend(Module1)
he.saySomething

Hi…

4. 别名

关键字说明
alias给方法,全局变量添加别名
Module类中alias_method给方法添加别名
def sing
    puts "I sing a song, its name is Old Man"
end
alias singNew sing
def sing
    puts "I sing a song, its name is What"
end
sing # 新定义的sing
singNew #仍旧绑定之前没有被重新定义的方法

I sing a song, its name is What
I sing a song, its name is Old Man

5. 对定义操作

class Person
    def saySomething
        puts "Good morning!"
        puts defined? "hello"
    end
end
he=Person.new
he.saySomething
puts defined?he.saySomething

Good morning!
expression
method

返回值说明返回值说明
supersuper可用assignment局部变量被定义,未赋值
method已被定义方法local-variable局部变量被赋值
yieldyield可用local-variable(in-block)被赋值并且在代码块中
selfself可用global-variable全局变量被赋值
nil对象为nilinstance-variable实例变量被赋值
true表达式为trueconstant常量
false表达式为falseclassvariable 类变量
expression表达式

释放定义用undef

6. method_missing

class Student
    def doHomework
        puts "I can do homework"
    end
    def method_missing pd
        puts "我不会#{pd.to_s}啊!"
    end
    def self.method_missing pd
        puts "我也不会 #{pd.to_s}。。。"
    end
end
he=Student.new
he.doHomework
he.eat
Student.goHome

I can do homework
我不会eat啊!
我也不会 goHome。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值