`
酷的飞上天空
  • 浏览: 521793 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

ruby语法二

阅读更多
 

ruby中的模块(require,load,include,extend)

模块是ruby组织代码的方式,提供命名空间的支持,类似于java中的包,但其功能更复杂一些

模块例子:

module MyModule
  #为了可以直接调用所有使用了类方法的定义
  def self.module_function
    puts "模块方法module_function"
  end
end
module MyModule
  CONST = "模块中的常量"
  module MySubModule
    CONST = "子模块中的常量"
  end
end

MyModule.module_function
#或者MyModule::module_function也可以调用模块中的方法
puts MyModule::CONST
puts MyModule::MySubModule::CONST

 

创建好模块后,下一步就是在其他的地方加载或者混入模块。ruby中有4个方法可以实现这些功能require,load,include,extend

require和load的功能是加载相应的模块文件到当前环境中。load不管之前是否已经加载过而直接包含源代码文件。require则进行检查,保证只加载一次。

用法如下

load 'yaml.rb'
require 'yaml'

 include和extend的作用是将模块混入或者扩展已有的模块或者类

用法如下

module MyModule
  def module_method
    puts "module_method"
  end
end
class MyClass1
  include MyModule
end
class MyClass2
  #相当于self.extend MyModule
  extend MyModule
end

myclass1 = MyClass1.new
#类中使用include,模块中的方法变成了实例方法
myclass1.module_method

#类中使用extend,模块中的方法变成了类方法
MyClass2.module_method


ss="aaa"
#所有对象都可以extend模块而获得模块中的方法,因为extend属于Object中的方法
ss.extend(MyModule)
ss.module_method

#总结:在类中extned模块则模块中的方法变为类方法,在对象上extend模块则模块中的方法成为实例方法

动态特性

ruby的动态特性体现在以下几个方面

1.动态执行字符串的代码

2.动态获得模块或类中的常量和变量值

3.动态为类或对象添加方法

4.对未知变量和方法的动态处理

5.动态删除定义

 

动态调用对象的方法

"abcd".upcase #返回ABCD
my_method = "upcase"
puts "abcd".send(my_method) #输出ABCD
my_method = "downcase"
puts "ABCD".send(my_method) #输出abcd
 

动态获得模块或类中的方法,常量,变量值

#methods是Object中的方法,他返回对象所包含所有的公开方法名称。结果为一个数组
puts String.methods.length
#同理instance_methods返回的是所有的实例方法
puts String.instance_methods.length
#method_defined?用来检查是否对象定义了相应的方法
puts String.method_defined? "reverse"
#respond_to?用了检查类是否能够响应某实例方法的调用
puts "sss".respond_to? "upcase"

#根据常量的名称获得模块或类中常量的值
name = "PI"
puts Math.const_get(name)
#根据类的名称创建类的实例
class_name = "Array"
my_array = Object.const_get(class_name)
#输出数组的长度
puts my_array.new.length

动态定义方法

class MyClass
  def self.new_method(name,&block)
    #调用module的私有方法define_method
    define_method(name, &block)
  end
end

MyClass.new_method("my_new_method") {puts "这是动态定义的方法"}
my_class = MyClass.new
my_class.my_new_method
 

调用未知方法的处理

method_missing介绍,当调用的方法不存在时执行

class MyClass
  def method_missing(name)
    puts "方法#{name}尚未定义!"
  end
end

MyClass.new.unknown_method
#输出 方法#{name}尚未定义!

 动态删除方法

取消定义方法的关键字是undef。module类中还提供了remove_method,undef_method,remove_const方法。其中remove_method只能删除当前的方法定义,而undef_method则连带父类的方法定义一并删除

例子:

def test_function
  puts "test_function"
end
#取消方法的定义
undef test_function

class MyClass
  def method1
    puts "method1"
  end
  def method2
    puts "method2"
  end
end
#继承类MyClass
class MySubClass<MyClass
  #当调用的方法不存在是被调用
  def method_missing(name)
    puts "方法#{name}未定义!"
  end
  def method1
    puts "submethod1"
  end
  def method2
    puts "submethod2"
  end
  #移除当前类的method1方法的定义
  remove_method("method1")
  #取消方法method2的定义,包括父类中的定义
  undef_method("method2")
end

sub_class = MySubClass.new
sub_class.method1 #输出method1
sub_class.method2 #输出方法method2未定义!
 

 

 

分享到:
评论

相关推荐

    ruby语法自整理

    下面是对Ruby语法的详细解析: 1. 变量与常量 - 局部变量:以小写字母或下划线开头,如`var`或`_var`。 - 全局变量:以美元符号`$`开头,如`$var`。 - 类变量:在类中定义,以双`@`开头,如`@@var`。 - 实例...

    ruby语法

    这篇博文链接()可能详细解释了Ruby的基本语法和特性,但由于没有实际内容,我将根据常见的Ruby语法知识进行阐述。 1. **变量**: Ruby有四种类型的变量:局部变量(`local`)、实例变量(`instance`)、类变量(`...

    Ruby语言教程对Ruby语法的总结展示Ruby语法的基本概念和用法.docx

    ### Ruby语言教程对Ruby语法的总结 #### 一、变量与数据类型 **特点:** - **动态类型:** Ruby是一种动态类型的语言,这意味着你无需为变量声明具体的数据类型。 - **变量命名规则:** 变量名必须以小写字母或...

    09Ruby 语法.docx

    #### 二、Ruby 语法基础 - **文件扩展名**:所有 Ruby 文件的扩展名为 `.rb`。 - **简单示例**:创建一个名为 `test.rb` 的文件,并在其中写入如下代码: ```ruby #!/usr/bin/ruby -w puts "Hello, Ruby!"; ```...

    Prorammer ruby 语法截图

    以下是一些从书中的截图中可以提炼的重要Ruby语法知识点: 1. **变量** - `local变量`:以小写字母开头,如`x = 10`。 - `实例变量`:以`@`开头,如`@name = "John"`。 - `类变量`:以`@@`开头,用于整个类共享...

    ruby语法基础教程及Ruby教程中文版和安装文件

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本教程将深入探讨Ruby的基础语法,并介绍如何下载、安装Ruby,以及使用Ruby教程中文版进行学习。 首先,让我们从Ruby的...

    前端学 Ruby:熟悉 Ruby 语法.pdf

    ### 前端学 Ruby:熟悉 Ruby 语法 #### Ruby 是什么? Ruby 是一种动态的、面向对象的脚本语言,由日本人松本行弘在 1995 年设计并开发。作为一种解释型语言,Ruby 具有简单易懂、功能强大且灵活的特点。Ruby 在 ...

    Ruby 基础语法 视频教程1

    Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称。这个"Ruby基础语法视频教程1"涵盖了几个关键的概念,包括变量、变量规则以及表达式。以下是对这些主题的详细解释: 1. 变量(Variables): 在Ruby中,...

    ruby语法基础教程.pdf

    ### Ruby语法基础教程知识点概览 #### 一、Ruby语言概述 **1.1 Ruby的历史** - **创始人:** Ruby语言是由日本人松本行弘(Matz)在1995年开始开发的一种脚本语言。 - **发展背景:** 在Perl和Python流行的时代背景...

    Ruby 语法. Ruby 是一种开源的面向对象程序设计的服务器端脚本语言

    #### 二、Ruby 语言特性 - **面向对象**:在 Ruby 中,所有事物都是对象。这包括数字、字符串、数组、哈希表等基本数据类型以及函数和类。 - **动态类型**:Ruby 使用动态类型系统,变量可以在运行时改变其类型。 -...

Global site tag (gtag.js) - Google Analytics