以下分别介绍了class方法和module方法,还有最简单的def方法。

其中module和class的区别下面会说,这里首先声明,def定义的方法,需要定义对象后才能调用,而class和module都能随意进入。

class方法

ruby里的方法分为:类方法和实例方法

类方法:通过类名直接调用的方法

可以写的形式一般是3类:

第一种:

class Fo
  def self.bar
    p "aa"
  end
end

第二种:

class Foo
  class << self

    def bar 
       p "bb"

    end
  end
end

第三种:
class Fooo; end
  def Fooo.bar
  end

调用的时候:直接Foo.bar 这样调用即可。

实例方法:通过对象调用的方法

可以写成的形式也有3种:

第一种:

class Foo
  def baz
    p "mm"
  end
end

第二种:

class Foo
  attr accessor :baz
  end
foo = Foo.new
foo.baz = "instance method"

第三种:这种方法只针对foo这一个对象有效,称为单例方法,函数范围很小
class Foo; end
foo = Foo.new
def foo.baz
  p "instance method"
end

调用实例方法的时候,一定要先new一个对象出来

module(模块)方法

提前声明:module方法是ruby语言特有的,它是一个命名空间,避免定义了相同名称的函数或变量导致的冲突。

module也分为module实例方法和module类方法,它的写法其实与类方法是一毛一样的。比如:

上面这段代码就是一个模块类方法,特点是在定义方法和调用方法的时候都在前面加上了所在module的名字,这样定义的函数就叫module method 。

在定义方法名称的时候,我们不加module name,这样定义出来的方法就叫模块实例方法(module instance method),这种方法就是实例方法,只能被mixin到某个class中被引用。

module与class的区别:

1、module不能实例化,即module为实例方法的module时,它不能被自己引用,需要利用include方法引用到class中;

2、module不能继承,而class可以

常量定义:凡是首字母大写的,都是常量,包括class和module都是,常量在调用的时候用::

调用规则:

类调用用::或者.

实例调用只能用.

所以为了区分,一般类调用我们都用::

下面说一下class对module的调用:

  1. module Mammal # 哺乳动物
  2. def suckle # 哺乳
  3. print "I can suckle my baby \n"
  4. end
  5. end
  6.  
  7. module Flyable ·· #可飞行的
  8. def fly #飞行
  9. print "I can fly", "\n"
  10. end
  11. end
  12.  
  13. class Chiropter #蝙蝠
  14. include Mammal #蝙蝠是哺乳动物
  15. include Flyable #蝙蝠可以飞行
  16. end
  17.  
  18. achiropter = Chiropter.new
  19. achiropter.suckle
  20. achiropter.fly

ruby基础知识之 class&module的更多相关文章

  1. ruby 基础知识 - Class 与 Module

    原文 1. 因為 Ruby 並沒有「屬性」(property/attribute)這樣的設計,要取用實體變數,需要另外定義的方法才行: class Cat def initialize(name, g ...

  2. ruby 基础知识(一)

    突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html    相信初学者会受益颇多 ruby  参考文档 ...

  3. 【ruby】ruby基础知识

    Install Ruby(安装) For windows you can download Ruby from http://rubyforge.org/frs/?group_id=167 for L ...

  4. ruby 基础知识(二)

    ruby  中的动态方法 http://singleant.iteye.com/blog/1680382 Rails 大量使用了符号(symbol).符号看上去很像变量名,不过以冒号作为前缀.符号的例 ...

  5. 1. Ruby基础知识

    1. Ruby执行选项 符号 作用 -c 检查代码正确性 -w 警告模式运行 -e 字面脚本 -l 行模式运行 单独 ruby -c Hello.rb 组合 ruby -le 'print " ...

  6. ruby 基础知识三 读写文件

    1.File 中参数的含义 r 只读模式.文件指针被放置在文件的开头.这是默认模式. r+ 读写模式.文件指针被放置在文件的开头. w 只写模式.如果文件存在,则重写文件.如果文件不存在,则创建一个新 ...

  7. ruby 基础知识2 - 区块 block

    原文 1. block中的 yield 与遍历 5.times do |i| puts i end 或者 def my_times(n) i = 0 while n > i i += 1 yie ...

  8. ruby基础(四)

    ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...

  9. Ruby基础教程

    一.Ruby基础知识 1.关于Ruby Ruby是脚本语言 Ruby是面向对象语言 Ruby是跨平台语言 Ruby是开放源码软件 2.Ruby入门书籍推荐 <Ruby.Programming向R ...

随机推荐

  1. 爬虫入门之Scrapy 框架基础功能(九)

    Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...

  2. .net Basic

    Java's concurrent API https://code.google.com/p/netconcurrent/ java 之DelayQueue实际运用示例 阻塞任务队列DelayQue ...

  3. Spring学习之-各注解的含义总结

    注解配置 @ComponentScan("spittr.web"):/在加载Spring上下文时,会扫描spittr.web包查找组件 @ComponentScan注解扫描的组件有 ...

  4. python 字符编码、格式化

      数据类型-布尔值一个布尔值只有True.False两种值,要么是True,要么是False 布尔值可以用and.or和not运算 空值是Python里一个特殊的值,用None表示 Python对b ...

  5. !important 语法

    语法: Selector{sRule!important;} 说明: 提升指定样式规则的应用优先权. IE6及以下浏览器有个比较显式的支持问题存在,!important并不覆盖掉在同一条样式的后面的规 ...

  6. 常规渗透:没遇到过的anquan狗

    0x01 信息收集 服务器信息: windows 2003 + IIS 6.0 + aspx . Php + 安全狗 站点cms信息:一套aspx新闻发布系统 和 Discuz X3 端口信息 : 服 ...

  7. CodeIgniter框架学习要点

    以下内容从兄弟连的CI教学视频中摘抄: http://codeigniter.org.cn/tutorials/ ------------------------------------------- ...

  8. Ace admin 如何实现类似于freamset加载页面

    如上标题所述,ace admin做后台页面的时候,可以实现类似于用freamset的功能,但是ace admin做的比freamset更好,他可以用异步加载的形式展示,而加载的页面的内容可以尽可能的少 ...

  9. IDEA 搭建Java WEB 开发环境

    本文是一篇讲解如何在 目前比较流行的IntellJ IDEA 下搭建JavaWEB的说明文档, 如有写的不详细的地方,希望各位留下自己宝贵的意义. Tips : 遇到的问题 , 请耐心看完文章,在文章 ...

  10. websphere 配置库中已存在应用程序,异常处理

    from:http://mengdboy.iteye.com/blog/1677379 出现此问题的原因之一:操作界面上没有卸载完成. 进行一下操作: 1.删除 $WAS_HOME/profiles/ ...