ruby 类、对象、变量

7、类Class

(1)initialize 方法 ,initialize是一个特殊方法,默认为私有,在调用new创建一个 新对象时,Ruby首先分配一些内存来保存未初始化的对象,然后调用对象的 initialize方法,

(2)inspect方法 默认将对象的ID和实例变量格式化

(3)Ruby的类永远都不是封闭的,意味着可以向一个已有的类中添加方法,包括内 建类

(4)Ruby的类允许继承,如class Child < Parent

(5)继承与Mixins Ruby支持单继承,但可以从任何数量的mixin中引入功能,这 提供了可控的、类似于多继承的能力。

(6)方便快捷的定义属性的访问方法,如:

class Song

attr_reader :name, :artist, :duration

end

类似的方法有:attr_writer 写属性

(7)虚拟属性 使用属性创建方法创建虚拟实例变量,对外部就像其他属性一样,但 内部却没有对应的实例变量,如:

class Song

def duration_in_minutes

@duration/60.0

end

def duration_in_minutes=(value)

@duration=(value*60).to_i

end

(8)类变量 类似于C++中的类静态变量,由两个@开头,如:@@count

(9)类方法 类似于C++中的类静态函数,定义类方法的方式还有

class Demo

def Demo.meth1

end

def self.meth2

end

class << self

def meth3

end

end

end

8、Singleton模式

class MyLogger

private_class_method :new

@@logger = nil

def MyLogger.create

@@logger = new unless @@logger

@@logger

end

end

注释:private_class_method 将类方法声明为私有;

9、变量不是对象,而是对象的引用:

person1 = “Tim”;person2=person1

person1[0]=”J”

person2

将person1赋值给person2不会创建任何新对象;它只是将person1的对象引用拷贝给 person2,因此person1和person2都指向同一个对象。赋值别名对象,潜在地给你引用 同一对象的多个变量,可以通过String的dup方法来避免。

person2 = person1.dup

10、可以通过冻结一个对象来阻止他人对其进行修改, 如 person1.freeze

时间: 2024-08-04 01:29:02

ruby 类、对象、变量的相关文章

python—类对象和实例对象的区别

最近在对RF的通讯层的模块进行封装,需要将之前放在类似main里面的一个方法,如下所示:这段代码是开发提供,用于接口测试,模拟底层通讯,具体的通讯是在dll内,python这边只是做了个封装让RF进行调用.这段通讯层的代码实质上做了五件事: 第一:加载dll: 第二:初始化dll内的通讯参数: 第三:与服务器进行连接,创建session 第四:把数据senbuffer通过sessionManger发送给服务器 第五:取得的数据返回recibuffer def testlogin(ip,port,

ruby中的类实例变量和实例的实例变量

ruby中有实例变量这个语法,有点类似java的对象的属性,但是ruby中类也有实力变量, class Person @name = 'hello' def initialize(name,age) @name = name @age = age end def self.talk #类方法,类方法可以访问类的实力变量 puts "#{@name}" end def talk #实例方法,只能访问实例的实例变量 puts "#{@name}" end end p1

雷林鹏分享:Ruby 类和对象

Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到的类和对象.类是个别对象创建的蓝图.在面向对象的术语中,您的自行车是自行车类的一个实例. 以车辆为例,它包括车轮(wheels).马力(horsepower).燃油或燃气罐容量(fuel or gas tank capacity).这些属性形成了车辆(Vehicle)类的数据成员.借助这些属性您能把

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定义 (1) 接口部分定义格式 接口部分定义格式 : @interface className : superClassName { type _variableName; ... ... } - (type) methodName : type parameterName; @end -- 接口定义

福利-&gt;KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型. 废话不多说,直接上代码: 1.工具类(其实就是NSObject的一个分类)头文件 1 #import <Foundation/Foundation.h> 2 3 @interface NSObject (YSRuntime) 4 5 /** 6 返回当前类的属性数组 7 8 @return 属

引用成员变量 和 类对象做成员变量

注意: 1. 引用成员变量 必须在构造函数的初始化列表中进行初始化 2. 引用成员变量 并不为这个变量新辟空间:类对象做成员变量则是要对其新辟一段空间的. 如下代码中,使用date1做参数初始化person_ref和person_obj.person_ref的birth字段date1为同一个地址空间,而person_obj的birth字段则是新辟了一段空间. #include <iostream> using namespace std; class Date { int month, yea

C++ Primer 学习笔记_22_类与数据抽象(8)--static 成员变量、static 成员函数、类/对象的大小

一.static 每个static数据成员是与类关联的对象,并不与该类的对象相关联!非static数据成员存在于类类型的每个对象中,static数据成员独立该类的任意对象存在. static成员函数没有this形参,它可以直接访问所属类的static成员,但是不能直接使用static成员! 1.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时可

[Java]变量及其初始化 与 类对象的初始化

1 变量的初始化 1.1 变量的[定义] 1.2 变量的[作用域] 1.3 变量的[初始值] 1.4 补充:缓存变量 1.5 变量的[分类]与[未初始化情况] 2 类对象 2.1 类对象的初始化/构造过程 1 [对象]的初始化流程 2 实验 class Base{ static { System.out.println("[Base:static area]"); }//step1 { System.out.println("Base:instance area")

ruby中实例变量、类变量等等的区别和联系

ruby的变量有局部变量,全局变量,实例变量,类变量,常量. 1.局部变量 局部变量以一个小写字母开头或下划线开头 局部变量有局部作用域限制(比如一个block内),它的作用域起始于声明处,结束于该声明所在的块.方法定义.类/模块定义的结尾.大家在写代码时经常这样写: irb(main):001:0> i=123    ---------- 这里的i就是局部变量 =>123 irb(main):002:0> s="hi"   ---------- 这里的s就是局部变量