Ruby Class

类定义:

class 类名
  类定义
end

※类名大写字母开始!!!

构造方法(initialize)

类名调用new方法的时候,触发的一个方法。

def initialize(my_name = "Voctrals")
    @name = my_name
end

@name,实例变量,属于一个实例,在实例中有效。每一个实例都有自己的@name。

创建实例:

voctrals = Hello.new
tla = Hello.new("Tla Lou")

getter/setter

#getter
def name
    @name
end

#setter
def name=(value)
    @name = value
end

调用以上方法:

getter:  voctrals.name

setter:  voctrals.name= "Voctrals Lou"

作为简化方式:

attr_accessor :name(会生成setter方法和getter方法,一定要注意冒号跟name之间不能有空格)

attr_reader :name(会生成getter方法,一定要注意冒号跟name之间不能有空格)

attr_writer :name(会生成setter方法,一定要注意冒号跟name之间不能有空格)

类方法:

a:优点,跟普通方法很像;缺点,更改类名时需要修改方法

class Hello
    def Hello.say_something(something)
        print something
    end
end

b:

class Hello
    #body
end
class << Hello
    def say_something(samething)
        print something
    end
end

c:

class Hello
    def self.say_something(something)
        print something
    end
end

方法没有参数的时候,方法定义处和方法使用处可以省略括号

类方法的调用有两种,分别为"."和"::"。

类中的常量:必须首字母大写!

类中的常量不能被修改。dynamic constant assignment

类中的常量在外界的唯一访问方法为:类名::常量名称

类变量,静态变量

类变量以@@开始(@开始的是实例变量)

类变量在外界也无法获取,只能通过自定义的方法来获取其值。

扩充类:

说的更直白一点就是觉得人家的类挺有用,想用人家的方法。那么怎么用人家的方法呢?如下:

class String
    def count_word
        ary = self.split(/\s+/)  #就在这里了
        ary.size
    end
end

继承:

class A < B
    def some_method(param)
        super(param)
    end
end

方法的限制

pubic  无访问限制

private  将方法限制为类内使用

protected  类内使用,或者其类的子类使用

def methodname1
~
end

def methodname2
~
end

public :methodname1, :methodname2
private :methodname1, :methodname2

或者:

public

def methodname1    #public method
~
end

def methodname2    #public method
~
end

private

def methodname3    #private method
~
end

def methodname4    #private method
~
end

Array : arr = ["Boo", "Foo", "Woo"]; arr[0]  #=> Boo

Hash: hash = {0=>"Boo", 1=>"Foo", 2=>"Woo"}; hash[0] #=> Boo

def get_and_downcase(arr, index)
    arr[index].downcase
end

以上方法适用于Array和Hash,也就是说适用于有[]方法的所有的对象。跟接口是一个概念吧。

模块

  • 程序的集合体
  • 不能创建模块的实例
  • 模块不能继承

用途

1)提供命名空间,防止变量名称重复

模块下的变量的使用需要按照如下形式: 模块名称.变量名称(方法名称)

如果模块中的变量名称是唯一的,也可以省略模块名称

include Math

p PI  #跟p Math::PI相同
p sqrt(2)  #跟p Math.sqrt(2)相同

2)Mix-in:在类中通过include引入模块的方式称为mix-in。

两个类mix-in同一个模块,那么这两个类具有部分相同的功能。这与继承不同,他俩不是is_a?一个父类的。

Ruby不支持多继承,使用mix-in基本上类似于多接口。

自定义模块

module ModuleName
    # module body
end

与类相似,模块名称首字母大写

1)常数

module VoctralsModule
    Version = 1.0
end

#获得Versionp VoctralsModule::Version

2)方法定义

module Voctrals
    Version = 1.0
    def version_print
        print Version
    end
    module_function :version_print  #如果不加上这句话的话,这个方法外部无法调用,private!
end

p Voctrals::Version
Voctrals.version_print
时间: 2024-07-31 04:10:23

Ruby Class的相关文章

在 mac 上搭建 ruby 环境

一.安装系统需要的包 安装Xcode开发工具,它将帮你安装好 Unix 环境需要的开发包 打开 App Store,搜索 Xcode,第一个就是,对了,有4个多G,网速如果不大好,就请先厕所哭会儿吧,慢慢等~ 二.安装 RVM RVM 是什么?不懂?没关系,你都在看这篇文章了,说了你也不懂,如果你懂也没必要看这个,日后你慢慢且懂~ 开始进入主题: (1)打开 mac 的终端,输入一串命令:curl -L https://get.rvm.io | bash -s stable (2)载入 RVM

HTML5 &lt;ruby&gt;注释标签

今天学了HTML5的ruby标签,觉得挺有趣的,来记录一下. ruby可以作注释标签,内部有rp和rt标签. <ruby>  标记定义注释或音标. <rp>    告诉那些不支持ruby元素的浏览器该如何显示. <rt>      标记定义对ruby注释的内容文本. 学完这个标签的第一反应就是,我有方法给那些不会读的日语单词做假名注释啦!!! 代码如下,来给一句日语做个小注释: <!DOCTYPE html> <html lang="en&q

RVM(ruby version manage)安装指南

一.安装需要3步gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \curl -sSL https://get.rvm.io | bash -s stable 退出后,重新登陆即可. RVM的基本命令: 列出已知的 Ruby 版本 rvm list known 安装一个 Ruby 版本 rvm install 2.3.3 --disable-binary 参考:htt

Ruby环境搭建——Windows

下载 rubyinstaller. 链接:http://rubyinstaller.org/downloads/.直接运行安装 注意需要在环境变量中添加: ..\ruby\bin 测试命令:ruby -v 安装rubygems. 链接:https://rubygems.org/ 自动:gem update --system 手动:cd C:\Downloads\rubygems-2.6.7 ; ruby setup.rb 安装gem包. gem install net-scp gem insta

教你ruby快速入门的方法

在学习新的编程语言的时候,我们一定要弄清楚一下几个问题: 语言的类型模型是什么? 强类型/弱类型,静态类型/动态类型 类型模型会改变问题的处理方式,控制语言的运行方式 语言的编程范型是什么? 面向对象.函数式.过程式等等 怎样和语言交互? 编译.解释 语言的判断结构(decision construct)和核心数据结构是什么? 哪些核心特性让这门语言与众不同? 因为每门编程语言都有自己的一套惯用方法,各有所长,各有缩短,通过学习不同的编程语言,你会明白,哪门语言最适宜解决自己当下关注的问题.下面

如何在ubuntu中搭建ruby开发环境

Ubuntu是一个以桌面应用为主的linux操作系统,在进行项目开发的时候,需要在ubuntu中安装ruby开发(http://www.maiziedu.com/course/ruby-px/)语言,主要是考虑到项目的高可变性,以及由此产生的高适应性,所以选择用ruby.跟Java相比,ruby的确比较灵活,能写出千变万化的代码. 但是,比较可悲的是,在windows7上面搭建ruby环境问题比较多.无论是基于cgywin,还是直接使用netbeans都不尽如人意. 因为想调整webserver

ruby入门知识:了解ruby历史及特性

今天给大家分享一下ruby基础教程(http://www.maiziedu.com/course/ruby-px/),主要介绍ruby的来源和ruby的特性,下面就先来看看ruby的简介吧: Ruby是一种纯粹的面向对象编程语言.它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年. 您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)的名字.在 Ruby 社区,松本也

ruby安装

Linux安装: apt-get install ruby 看官方推荐的: http://www.ruby-lang.org/en/documentation/installation/#apt Debian GNU/Linux and Ubuntu use the apt package manager. You can use it like this: $ sudo apt-get install ruby-full As of writing, the ruby-full package

Ruby Profiler详解之ruby-prof(I)

项目地址: ruby-prof 在上一篇 Ruby 中的 Profiling 工具中,我们列举了几种最常用的 Profiler,不过只是简单介绍,这一次详细介绍一下 ruby-prof 的使用方法. ruby-prof 是比较强大的,支持 cpu,内存使用,对象分配等等的性能分析,而且提供了很多友好的输出格式,不仅仅是有基于文字,html 的格式,还能输出 graphviz 格式的 dot 文件,以及适用与 KCacheGrind 的call tree格式, 其实这个格式是基于 Valgrind

Ruby探针的基本实现原理

李哲 - MAY 13, 2015 语言本身 Ruby语言支持语法级别的系统,框架,甚至语言本身的方法复写,一般叫做元编程(meta programming), 此基础之上还有一些术语为mixin,方法的动态定义,运行时类改写等等,这些技术和机制可以让语言本身就能实 现其他语言需要字节码才能实现的功能,例如探针需要hook HttpRequest中的request方法,就可以通过下面的方式实现: class HttpRequest def request_new puts 'before req