ruby基础知识之 class&module
以下分别介绍了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的调用:
module Mammal # 哺乳动物
def suckle # 哺乳
print "I can suckle my baby \n"
end
end module Flyable ·· #可飞行的
def fly #飞行
print "I can fly", "\n"
end
end class Chiropter #蝙蝠
include Mammal #蝙蝠是哺乳动物
include Flyable #蝙蝠可以飞行
end achiropter = Chiropter.new
achiropter.suckle
achiropter.fly
ruby基础知识之 class&module的更多相关文章
- ruby 基础知识 - Class 与 Module
原文 1. 因為 Ruby 並沒有「屬性」(property/attribute)這樣的設計,要取用實體變數,需要另外定義的方法才行: class Cat def initialize(name, g ...
- ruby 基础知识(一)
突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html 相信初学者会受益颇多 ruby 参考文档 ...
- 【ruby】ruby基础知识
Install Ruby(安装) For windows you can download Ruby from http://rubyforge.org/frs/?group_id=167 for L ...
- ruby 基础知识(二)
ruby 中的动态方法 http://singleant.iteye.com/blog/1680382 Rails 大量使用了符号(symbol).符号看上去很像变量名,不过以冒号作为前缀.符号的例 ...
- 1. Ruby基础知识
1. Ruby执行选项 符号 作用 -c 检查代码正确性 -w 警告模式运行 -e 字面脚本 -l 行模式运行 单独 ruby -c Hello.rb 组合 ruby -le 'print " ...
- ruby 基础知识三 读写文件
1.File 中参数的含义 r 只读模式.文件指针被放置在文件的开头.这是默认模式. r+ 读写模式.文件指针被放置在文件的开头. w 只写模式.如果文件存在,则重写文件.如果文件不存在,则创建一个新 ...
- 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 ...
- ruby基础(四)
ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...
- Ruby基础教程
一.Ruby基础知识 1.关于Ruby Ruby是脚本语言 Ruby是面向对象语言 Ruby是跨平台语言 Ruby是开放源码软件 2.Ruby入门书籍推荐 <Ruby.Programming向R ...
随机推荐
- Ubuntu下安装CUDA
cuda check: cuDNN 下载cuDNN后解压 更新软链接 更新链接库 symbol link 参考链接: http://docs.nvidia.com/cuda/cuda-installa ...
- linu常用命令链接
linux命令大全ps命令详解: http://www.jb51.net/LINUXjishu/151851.html Linux禁止ping以及开启ping的方法: http://www.cnblo ...
- QT组件与std性能
https://blog.csdn.net/zy19940906/article/details/53694909
- ArrayBlockingQueue详解
转自:https://blog.csdn.net/qq_23359777/article/details/70146778 1.介绍 ArrayBlockingQueue是一个阻塞式的队列,继承自Ab ...
- February 20 2017 Week 8 Monday
Behind every beautiful thing, there's some kind of pain. 美丽背后,必有努力. No pains, no gains, and sometime ...
- 快速搭建一个SSM框架demo
我之所以写一个快速搭建的demo,主要想做一些容器的demo,所以为了方便大家,所以一切从简,简单的3层架构 先用mysql的ddl,后期不上oracle的ddl ; -- ------------- ...
- SOJ4480 Easy Problem IV (并查集)
Time Limit: 3000 MS Memory Limit: 131072 K Description 据说 你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任 ...
- [原创] SiteServer 3.5 批量导入文章的SQL处理脚本
2005时做过一个小网站,当时是用ASP+Access做的,功能很简单,但里面的文章不少 现在就像把它转移到SS上来,重点就是如何导入文章 本来SS本身提供了批量导入功能,但对于在WEB上一次性导入一 ...
- 查找连接过的USB存储设备
gp "HKLM:\SYSTEM\CurrentControlSet\Enum\USBSTOR\*\*"|select friendlyname,CompatibleIDs,mfg ...
- DBUtils连接池,websocket
1.mysql数据库连接池 概念:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放. 这样 ...