2 基础知识补充

来源:互联网 发布:软件架构.pdf 编辑:程序博客网 时间:2024/05/22 03:29

1. 模块

1.1 定义,含混

module ModuleName    def moduleInfo        puts "I am a method in Module"    end     def self.moduleInfo2        puts "类方法成员"    endendclass PastInclude    include ModuleName #混含操作    def classInfo        puts "I am a method in class"    endendtest=PastInclude.newtest.classInfotest.moduleInfoModuleName.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    endendmodule ModulePlace2    class SecondPlace        def moduleInfo            puts "I am in ModulePlace2, I am moduleInfo too"        end    endendtest1=ModulePlace1::FirstPlace.newtest1.moduleInfotest2=ModulePlace2::SecondPlace.newtest2.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 中的类方法"    endendModule1.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..."    endendclass Man    extend Module1endhe=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"endalias singNew singdef sing    puts "I sing a song, its name is What"endsing # 新定义的singsingNew #仍旧绑定之前没有被重新定义的方法

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"    endendhe=Person.newhe.saySomethingputs defined?he.saySomething

Good morning!
expression
method

返回值 说明 返回值 说明 super super可用 assignment 局部变量被定义,未赋值 method 已被定义方法 local-variable 局部变量被赋值 yield yield可用 local-variable(in-block) 被赋值并且在代码块中 self self可用 global-variable 全局变量被赋值 nil 对象为nil instance-variable 实例变量被赋值 true 表达式为true constant 常量 false 表达式为false class variable 类变量 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}。。。"    endendhe=Student.newhe.doHomeworkhe.eatStudent.goHome

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

0 0
原创粉丝点击