Ruby学习笔记之面向对象

【Ruby学习笔记】1.Ruby的简介、环境、Linux安装及Windows安装 本章介绍Ruby的简介、环境、Linux安装及Windows安装。 阅读详情

面向对象


创建对象

a_book = BookInStock.new

another_book = BookInStock.new

类声明


class BookInStock

def initialize(isbn, price)

@isbn = isbn

@price = Float(price)

end

def to_s

"ISBN: #{@isbn}, price: #{@price}"

end

注意:

1.出现在init方法中的属性加入到类中

2.to_s是toString方法

3.类名必须以大写开头,类名是常量

构造器

Ruby的构造器同Java不同的是:

1.Ruby的对象属性都由@开头。

2.Ruby只有一个构造方法。

3.在各个方法中都可以吧变量加入类中,这种灵活性在静态语言中并未出现。因此Ruby中必须有完全的了解。

3.常量只能在类体中出现,在其他方法中出现都是错误的。

getter和setter


Ruby中的所有属性都是私有的,因此要为他加上访问方法,getter方法就是属性名,setter方法是属性名加等于号。

例如:

def price=(new_price)

@price = new_price

end

def price

@price

end

Ruby还提供了可以生成简单的setter和getter的方法

attr_reader :isbn, :price //生成getter方法

attr_accessor :price //生成getter和setter方法

虚拟属性就是提供了一对getter和setter方法

属性访问

1.在其他语言中在类中可以访问同一类对象的私有属性,但是Ruby中不可以,只能通过getter和setter来访问(可能是缺乏类型检查的原因)

def +(other) # Define + to do vector addition

Point.new(@x + other.x, @y + other.y)

end

2.类属性在类内部和类外部的表现是不同的。

java和scala中的构造顺序问题

问题:java在子类构造过程中调用父类的构造器可能会子类覆盖的方法,但是这时子类仅仅产生并未初始化,也就是说父类得到的结果是没有定义的,因此构造结果也无法定义。在C++中父类构造过程中调用的是父类的方法。

 解决方法:父类的使用未定义字段的字段设为lazy

但是在Ruby中,没有抽象的东西,因此没有这个问题

类体中执行代码

在Ruby中,类也是一个对象。因此在类产生时可以执行在类体中的代码,这时self指向的这个类本身,因此对于可执行的代码有要求。这些方法应该是Class及其父类的实例方法,以及这个类本身和其父类的类方法。

类和实例变量


常量

1.类中常量要全大写,且在构造器外初始化,

2.在应用是用双冒号

3.::ARGV # The global constant ARGV

4.但是Ruby并不阻止程序改变常量,只是会有一个警告

class Point

def initialize(x,y) # Initialize method

@x,@y = x, y

end

ORIGIN = Point.new(0,0)

UNIT_X = Point.new(1,0)

UNIT_Y = Point.new(0,1)

# Rest of class definition goes here

end

访问控制

Ruby中的对象访问都是通过方法实现的,因为属性都是私有的。而方法默认public,还有protected和private

可以直接在方法前面设定,也可以在类后面列出来

public :method1, :method4

protected :method2

private :method3

类方法

类方法就是静态方法,在java中对象可以访问类方法,但是在Ruby中只有类可以访问,对象无法访问。

参见: 类方法(静态方法)

self


类定义

在类定义中(但在实例方法外部)以及类方法中self指的是这个类。与此相反的是,在实例方法中,

类属性

类属性是同类同时存在的变量,和Java相同的是:类属性在类的各个实例之间共享,类属性可以用在类方法,实例方法中。

不同之处是:

1.类属性必须在类体中声明,同时可以在init方法中进行初始化

2.类属性没有getter和setter,只能在类体中访问,无法直接访问。

3,类属性的另种定义

class << String

attr_accessor :b

end

注意:这儿并没有设定任何的属性,仅仅通过attr_方法来得到一对属性

类实例变量

类属性和类实例属性

1,类属性在在定义的类,继承类和他门的对象中是共享的。

2,类实例属性仅仅在本类及其对象中可用

3,由于他们的不同,Ruby中建议使用类的实例属性,用来仅仅在定义的类和其对象来共享。和子类没有关系。

4,他们的setter和getter的设置方法都是一样的

class Foo

@@i = 1

def self.i

@@i

end

def self.i=(value)

@@i = value

end

end

5,类实例属性必须在类体中的设定,不能再类的实例方法中设定

class MyClass

@my_var = 1

def self.read; @my_var; end

def write; @my_var = 2; end

def read; @my_var; end

end

obj = MyClass.new

obj.write

obj.read # => 2

MyClass.read # => 1

6,类属性可以在类的实例方法中访问,而类实例属性则只能在类方法中访问。从这个意义上,类属性和Java中static属性相同。

类和实例方法


对象深拷贝

dup方法,会把冻结的对象解冻

copy方法,不会把冻结的对象解冻

注意copy和dup方法在拷贝对象的属性时,仅仅只会拷贝他们的引用。因此不符合深拷贝的要求,要想改变这个默认行为,要覆写init_copy方法

def initialize_copy(orig) # If someone copies this Point object

@coords = @coords.dup # Make a copy of the coordinates array, too

end

重载操作符

def coerce(other)

[self, other]

end

这样就可以允许,操作符的任意顺序

对象冻结

freeze方法,对象一旦冻结就无法更改其内容

对象不安全标记

一个对象通过调用taint来标记为不安全的对象,一个由不安全的对象产生的对象都是不安全的,包括拷贝。调用untaint方法可以吧一个对象变成安全的。

注意:用户输入,包括命令行,环境变量以及标准输入都会默认标记为不安全的。

模块


1.模块不可以被继承

2.模块被用作名字空间和混入。

3.模块名和类名相同,首字母必须大写

混入

在要混入的模块中,难免会使用他未定义的方法或者变量,那么这时候模块就变成了抽象的。必须在他混入的类中声明这些。

导入


Ruby中的模块名名和类名都是大写开头,文件名和文件夹名则是小写开头,在导入的时候必须导入文件名,有的模块仅仅有一个文件构成,而有的模块有多个文件构成,他的存在仅仅是一个文件夹,这时候不能直接导入模块,而要导入相应的文件名。注意导入时会忽略大小写,但是一般都是按文件名导入(都是小写)。

执行

用require加载一个文件时会执行其中的代码。

自动加载

自动加载在第一次引用某个模块中的内容时,用require加载模块,相当于懒加载。

autoload :TCPSocket, "socket"

可以定义的量

类方法,常量,类方法,实例方法

模块和类的相似性

类是一个Class类的实例,而模块是一个Module类的实例,因此大部分可以用于类的规则也同时适用于模块。

继承


语法

class Parent

end

class Child < Parent

end

继承结构

nil->BasicObject->Object

其中BasicObject用在元编程中,Object则是每个类继承的根类

抽象类

Ruby中并没有抽象类,所谓的抽象类仅仅是缺少方法的类

class AbstractGreeter

def greet

puts "#{greeting} #{who}"

end

end

# A concrete subclass

class WorldGreeter < AbstractGreeter

def greeting; "Hello"; end

def who; "World"; end

end

这儿的父类调用了不存在的方法,只能由子类来实现

继承变量


实例变量

在Ruby中,类的实例变量都是私有的。但是在一定程度上,子类还是继承了私有变量。

类变量

子类会完全继承父类的类变量

常量

Ruby中的常量会完全继承,并且覆写它时不会对父类使用常量的方法产生影响,因为父类使用的是父类的常量。

继承方法


类方法

类方法会被继承,并且也可以被继承。但是在调用类方法时建议在定义的地方调用

实例方法

在Ruby中,即使是私有的方法都可以覆盖。对此,唯一的方法就是仅仅继承熟悉的类。因此这样的覆写不安全,因为私有方法是类实现的细节。事实上,私有的方法也可以在子类中使用。

需要注意的地方

1.子类在父类没有无参构造器时必须显式调用父类构造器

2.调用父类用super

3.Ruby使用单继承

3.在其他语言中:在继承有参构造器时,子类必须显式调用父类的构造器,但是Ruby不需要(事实上,Ruby中的构造器是一个普通方法,可以继承)。如果要调用父类构造器,那么可以用super。

4.调用父类用super

super

Ruby中的一个方法可以简单的用super调用其父类方法,如果不改变任何传递给父类的参数,可以什么都不写。

例如:

def method_missing(id,*args,&block)

return as($1.to_sym,*args,&block) if id.to_s =~ /^to_(.*)/

return rows_with($1.to_sym => args[0]) if id.to_s =~ /^rows_with_(.*)/

super

end

异常


抛出异常

raise

raise "bad mp3 encoding"

raise InterfaceException, "Keyboard failure", caller

接受异常

begin

while line = web_page.gets

output.puts line

end

output.close

rescue Exception

STDERR.puts "Failed to download #{page}: #{$!}"

output.close

File.delete(file_name)

raise

end

1.这儿的标准错误输出是STDERR

2.raise可以重新抛出异常

begin

eval string

rescue SyntaxError, NameError => boom

print "String doesn't compile: " + boom

rescue StandardError => bang

print "Error running script: " + bang

end

1.这儿可以有多个异常的接受

2.每个异常可以有一个变量,用来记录异常

ensure

f = File.open("testfile")

begin

# .. process

rescue

# .. handle error

else

puts "Congratulationsno

errors!"

ensure

f.close

end

ensure用来保证资源一定可以释放

retry

retry用来在错误恢复的时候重新执行整个try块

begin

...

end

rescue ProtocolError

if @esmtp then

@esmtp = false

retry

else

raise

end

end

自定义异常

class RetryException < RuntimeError

attr :ok_to_retry

def initialize(ok_to_retry)

@ok_to_retry = ok_to_retry

end

end

可以看到只要继承StandardError或者他的子类即可

异常层次


处理整个方法的异常

def ==(o) # Is self == o?

@x == o.x && @y == o.y # Assume o has proper x and y methods

rescue # If that assumption fails

false # Then self != o

end

错误跟踪


特殊变量

这些特殊变量都位于Kernel中。

__method__ 出错的方法

__callee__ 出错的调用方法

__FILE__ 出错文件名

__LINE__ 出错行

异常栈

一旦异常发生就可以用Exception.backtrace来查看异常栈,不过也可以不触发异常,用kernel.caller来查看异常栈

Struct

Struct根据提供的属性名来动态创建类,并且提供了一些方法

一。创建类:

Point = Struct.new(:x, :y)

二。对象方法:

p = Point.new(1,2) # => #<struct Point x=1, y=2>

getter和setter

p.x # => 1

p.y # => 2

p.x = 3 # => 3

p.x # => 3

p[:x] = 4 # => 4: same as p.x =

p[:x] # => 4: same as p.x

p[1] # => 2: same as p.y

迭代方法

p.each {|c| print c} # prints "42"

p.each_pair {|n,c| print n,c } # prints "x4y2"

相等

q == p

toString

q.to_s

三。动态更改类

添加比较

Point = Struct.new(:x, :y) # Create new class, assign to Point

class Point # Open Point class for new methods

include Comparable # Include a module for the class

def <=>(other) # Define the <=> operator

return nil unless other.instance_of? Point

self.x**2 + self.y**2 <=> other.x**2 + other.y**2

end

end

变成不变的

Point = Struct.new(:x, :y) # Define mutable class

class Point # Open the class

undef x=,y=,[]= # Undefine mutator methods

end

全局变量和方法

因为Ruby中大部分类中的变量,方法和常量都可以被继承和重写。同时又因为Object和Kernel处于继承层次结构的顶端,因此只要把方法和变量放入他们两个中,就成了全局的。

类的双面

在Ruby中,一个类是一个Class类的实例,也就是说:一个类就是一个对象,事实上累还是一个常量。既然类也是对象,那么类也可以用Class及其父类中的实例方法。而这些实例方法的定义都是对象通用的方法,这也是为什么类和对象有时会有相等的操作。同时这也导致了一些方法的差异。比如类上作用的是类方法,而对象上作用的是实例方法。

调用查找


实例方法查找算法


1.首先从对象的单例方法中开始查找,如果没有进入下一步

2.从对象的类中查找实例方法,如果找不到。倒序在类中包含的模块中查找。

3.进入类的父类开始查找,并重复2中的步骤。

4.一直查找到Ruby的顶层类,如果没,那么就使用同样的步骤查找method_missing方法。在Kernel中提供了一个method_missing方法提供默认的行为。

注意:

1.注意查找的顺序是先类在模块

2.由于Ruby的继承层次,BasicObject,Object和Kernel模块参与每次的查找。

3.这样的顺序其实是沿着Ruby的类继承链查找的。

继承链

继承链是指实例方法的查找顺序,这个可以通过Module.ancestors来获得。

类方法

变量查找算法

Eigenclass


Ruby的单例方法存在于每一个对象或者类的Eigenclass中,也叫做单实例类,因为这个类是每一个对象独有的类。在方法查找的轨迹中这是第一个要检测的地方。

访问

class << an_object

# your code here

end

得到单实例类

obj = Object.new

eigenclass = class << obj

self

end

eigenclass.class

得到Eigenclass的帮助方法

class Object

def eigenclass

class << self; self; end

end

end

继承


对象Eigenclass

一个对象的Eigenclass就是这个对象的类的子类。这也意味着Ruby中每个对象的类其实是Eigenclass。

类Eigenclass

一个类的Eigenclass是这个类的父类的Eigenclass,到最顶层BasicObject的Eigenclass是Class,这样有两个要注意:

1,如果把Class看做Ruby中一个类的类的话,那么Class的Eigenclass和独享的Eigenclass就是类似的。

2,Eigenclass相互继承,这样类方法才可以继承通过子类来调用。

Extension


Class Extension

可以看到这个方法使得一个模块的实例方法变成了类的单例方法

module MyModule

def my_method; 'hello' ; end

end

class MyClass

class << self

include MyModule

end

end

MyClass.my_method

注意这个方法中,访问类的Eigenclass不是最简化的方式而是用这种间接的方式

Object Extension

module MyModule

def my_method; 'hello' ; end

end

obj = Object.new

class << obj

include MyModule

end

obj.my_method # => "hello"

obj.singleton_methods # => [:my_method]

模块的实例方法变成了对象的单例方法

extend

Object.extend是一种简化的方法,它综合了上俩种Extension的功能。

module MyModule

def my_method; 'hello' ; end

end

obj = Object.new

obj.extend MyModule

obj.my_method # => "hello"

class MyClass

extend MyModule

end

MyClass.my_method # => "hello"


Ruby 面向对象编程 在 Ruby 中,类使用class关键字定义。类名通常是大写的,并遵循驼峰命名法。# 类的定义endRuby 的面向对象特性使其成为开发复杂应用程序的强大工具。通过类的定义、继承、模块的使用,以及访问控制,Ruby 程序员可以创建清晰、可维护的代码。Ruby 的灵活性也体现在其支持单例方法和 mixins,这些特性进一步增强了语言的表达能力。无论您是刚开始学习 Ruby 还是已经有一定的经验,深入理解 Ruby 的面向对象编程都将对您的编程技能产生深远的影响。 阅读详情

相关推荐

Ruby编程基础与面向对象概念实战

Ruby语言由松本行弘于1993年发明,它的设计哲学强调简单与表达性。Ruby深受Perl、Smalltalk、Eiffel和Lisp等语言影响,是一款纯面向对象的编程语言,同时也支持函数式编程范式。Ruby的语法简洁而富有表现力,常因其”一行代码解决问题”的特性而受到程序员的欢迎。在Ruby中,类是一种结构,用于将具有共同属性和方法的对象归为一类。类是对象的蓝图或模板,通过它我们可以创建具体对象的实例。类的定义从关键字class开始,并以end结束。

weixin_36282234的博客 1004

Ruby define_method def 的区别

今天稍微搜了一下很少有讲define_method跟def的中文文章,英文的也没有讲得很明白的,今天就斗胆把我的理解跟大家分享一下。 入门级别: [code="ruby"] class Foo def initialize x @x = x end end class Bar define_method :initialize do |x| @x = x ...

博客的名字不需要太长不过一定要让别人印象深刻 429

医学影像AI的幻觉问题与CCD解决方案

医学影像AI在辅助诊断中面临的核心挑战是幻觉现象,即模型生成不符合实际影像的虚假诊断。这种现象源于多模态大语言模型(MLLMs)在视觉-语言对齐上的技术局限,可能导致假阳性或假阴性的临床风险。通过临床对比解码(CCD)框架,结合症状锚定和专家引导的双阶段校准机制,可有效提升模型输出的可靠性。该技术在CheXpert和MIMIC-CXR等标准数据集上验证,显著改善了肺不张、胸腔积液等关键指标的检测准确率。对于医疗AI落地场景,这种即插即用的解决方案既规避了数据隐私合规问题,又降低了基层医院的部署门槛,为AI辅

weixin_36303807的博客 322

Ruby 操作符表达式赋值

  操作符表达式 赋值 计算赋值 多重赋值 范围表达式 and or not 条件操作符 例: 1+2*3/4 为了便于编程,有些方法调用和控制结构是以操作符的形式出现的。Ruby语言中有下列操作符。 高 :: [] ...

horace_lee的专栏 298

SuperMap iDesktop 9D三维倾斜摄影数据处理

OSGB格式的三维倾斜摄影数据进入时空大数据平台之前需要进行数据优化和格式转换

weixin_43204897的博客 1131

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 234

[ruby]方法定义和调用def、define_method

普通方法定义 def class A def a(arg) puts "a_#{arg}" end def b(arg) puts "b_#{arg}" end def c(arg) puts "c_#{arg}" end end a,b,c方法相似并重复,写测试的话需要每个方法都写,麻烦 动态方法定义 define_method 已知有哪些相似方法,放在一起定义 class A NameArray = %i(a b c) # =&gt

深度的博客 529

k8s学习笔记(3)--- kubernetes核心技术概念

kubernetes核心技术概念 1.API对象         API对象是K8s集群中的管理操作单元。K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。例如副本集Replica Set对应的API对象是RS。 2.集群(Cluster)         集群是指由...

梦谜的博客 1291

Ruby方法

Ruby 通常用 def 关键字定义方法,在 def 之后是新方法的名称,紧接着是方法体。

路漫漫其修远兮,吾将上下而求索! 1795

从IMC层到应力点:手把手教你用SEM/EDS给BGA焊点做一次‘体检’

本文详细介绍了如何使用SEM/EDS技术对BGA焊点进行全面失效分析,从样品制备到SEM观察、EDS分析,再到综合诊断,手把手教你识别焊点的微观特征和成分异常。文章特别强调了IMC层分析在BGA焊接失效诊断中的关键作用,并提供了实用的实验室技巧和常见失效模式对照表,帮助工程师快速定位问题根源。

weixin_42685438的博客 379

ChipCamp探索系列 -- 7A. 开源CPU之BOOM的来龙去脉

本文梳理一下Berkeley的乱序超标量CPU项目----Berkeley Out of Order Machine (BOOM),作为探索7系的首篇(7A)。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 1558

Ruby学习之面向对象的使用

Ruby是纯面向对象的语言,其中的一切都是对象,对于这一点,相信大家都不会反驳,它其中最原始的值诸如字符串、数字,甚至连 true 和 false 都是对象,类本身也是一个对象,是 Class 类的一个实例,它用于指定对象的形式,它结合了数据表示法和方法,把数据整理成一个整齐的包。类中的数据和方法被称为类的成员。我们这次就来详细的看下。 当我们定义一个类的时候,就相当于定义了一个数据类型的蓝图,...

luyaran的博客 382

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1036

【Ruby学习笔记】16.Ruby 面向对象

Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现。Ruby 中的每个值都是一个对象,即使是最原始的东西:字符串、数字,甚至连 true 和 false 都是对象。类本身也是一个对象,是 Class 类的一个实例。本章将向您讲解所有与 Ruby 面向对象相关的主要功能。

qq_62052372的博客 742

用 Message Monitoring Overview 打造接口健康驾驶舱:SAP AIF 消息监控实战解析

究竟解决了什么痛点?概括起来,这个应用把SAP AIF的接口监控,从传统的事务码和技术视角,带到了一个更加直观、业务友好的层次:(通过卡片式总览,让你在一个页面上看到所有自己负责的接口及其健康状况。通过和的联动,实现了从接口态势到具体消息的快速钻取。通过Recipient模型和应用,实现了监控职责的灵活分配。借助拖拽排序、搜索过滤等特性,让每个运维人员都可以打造属于自己的接口健康 cockpit。如果你正在做S/4HANA或项目,无论是公有云还是本地部署,只要系统启用了SAP AIF。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 106

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Programming Languages PartC Week1学习笔记——Ruby与面向对象编程

Programming Languages PartC Week3学习笔记——Ruby与面向对象编程

df1445的博客 676

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Ruby学习笔记(一)---初识Ruby

近日,了解到一门叫做Ruby的脚本语言,一门由日本工程师发明的,面向对象的语言。 简介 Ruby是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展Ruby的功能。 特点 Ruby被称为 “最快的开发语言” ,初步了解,Ruby有以下特点: 解释型执行,方便快捷 Ruby是解释型语言,其程序无需编译即可执行。 语法简单、优雅 语法比较简单,类似Algol系语法。 完全

卢楷方的博客 1182

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Ruby 基础学习笔记(纯粹的面向对象 方法 module 闭包 变量范围)

---------------------------------------------------------------------------------------------------------------------------------------------------------#About objects,instance variables,and methods...

tenguns的博客 235

Ruby语言学习笔记

请到我的博客中去看吧 https://jd1412.github.io/2019/01/15/Ruby语言学习笔记/

aptx4869_li的博客 252

Ruby 面向对象

当您定义一个类时,您实际是定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,而是定义了类的名称意味着什么,也就是说,定义了类的对象将由什么组成,以及在该对象上能执行什么操作。类定义以关键字class开始,后跟类名称,最后以一个end进行分隔表示终止该类定义。例如,我们使用关键字 class 来定义 Box 类,如下所示:按照惯例,名称必须以大写字母开头,如果包含多个单词,每个单词首字母大写,但此间没有分隔符(例如:CamelCase)。类提供了对象的蓝图,所以基本上,对象是根据类进行创建的。

zhoujinm的博客 1641

Ruby学习笔记(1)

是一个完美的面向对象语言。使用 Ruby 的语法比使用 Smalltalk 的语法要容易得多。

Donics的博客 1866

ruby学习笔记之一:ruby概述

 Ruby的历史:Ruby语言的发明人是日本人松本行弘(Matsumoto Yukihiro),大家亲切的称呼他"Matz"。可能会出乎大家的意料,Ruby并不是一种近年来才诞生的语言,它的历史可以追溯到1993年,Ruby之父Matz开始对脚本语言感兴趣。在通过一些分析和思考之后,Matz认为脚本语言是可以变得很强大和灵活的,于是他准备把脚本语言作为他的发展方向。 和很多人一样,Matz是一

fuliangliang的Blog 2684

programming ruby 2nd学习笔记

本文是我学习programming ruby 2nd的笔记,由于我熟悉的语言是java,python,所以会在其中夹杂一些ruby与java,python的比较,文中的其他语言一律指java,python。格式按原文的顺序,我只是按我阅读的顺序来更新本文,若没时间,更新会很慢。好像我的电子文档有问题,不少目录结构不正确。第一版序言 Ruby创始人的序言第二版序言 

行云流水 1万+

Ruby 面向对象知识总结

在类的内部,是使用 @ 运算符访问这些属性,在类的外部,则是使用称为访问器方法的公共方法进行访问。一旦常量被定义,您就不能改变它的值,您可以在类的内部直接访问常量,就像是访问变量一样,但是如果您想要在类的外部访问常量,那么您必须使用 classname::constant,如下面实例所示。这实际上并没有定义任何的数据,而是定义了类的名称意味着什么,也就是说,定义了类的对象将由什么组成,以及在该对象上能执行什么操作。类变量以两个 @ 字符(@@)作为前缀,类变量必须在类定义中被初始化,如下面实例所示。

sinat_40572875的博客 1158

ruby 新建对象_Ruby中的面向对象编程

ruby 新建对象Before getting into understanding how Object-oriented programming is implemented in Ruby, let us first understand what Object Oriented means. 在了解如何在Ruby中实现面向对象的编程之前,让我们首先了解面向对象的含义。 Object-o...

cumudi0723的博客 327
上一篇: Ruby学习笔记之标准库
下一篇: Ruby学习笔记之反射和元编程
ssjssh
博客等级 码龄15年 12粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值