`
zarknight
  • 浏览: 148229 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby way第一章学习记录[Ruby的OOP]

阅读更多

所有的东西都是对象
=================================
3.succ                  # 4
"abc".upcase           # "ABC"
[2,1,5,3,4].sort       # [1,2,3,4,5]

查看对象的类型:
"abc".class    #得到类型为String。等同"abc".type,不过type方法将过期

所有对象都有一个标识其唯一性的整数:
"abc".object_id   #等同"abc".id,不过id方法将过期


Ruby的内建类
==================================
Ruby有超过30个的内建类,另外,Ruby是单继承的语言。

new方法是通常用来实例化对象的:
myFile = File.new('my_file.txt','w')
myStr = String.new('hello,ruby')

以上不是必须的,我们可以这样来实例化:
myStr = "hello,ruby"
myNum = 4


Ruby的字符串
===================================
Ruby的字符串是mutable的,它不像java中的字符串(创建后不能更改,相同的字符串维护的是同一个实例)。
a = "hello"
b = "hello"
a.object_id #21627900
b.object_id #21627890
可以看出,同样的字符串,Ruby会生成不同的实例(这样,同样的字符串出现几此,就要占用几倍的内存空间,这也是为什么在rails中,大量采用ruby symbol而不用字符串来作为

hash键来改善性能的原因,具体情况,请google或baidu一下)。不过凡事总有两面性,Ruby的字符串这样设计虽然有它不好的一面,但也有好的一面,对字符串的可操作性就是它

的优点。

str = "abc"
str.gsub(/b/,'xyz')  #axyzc
str       #abc

str.gsub!(/b/,'xyz') #axyzc
str       #axyzc

想要让Ruby字符串变为immutable,可以使用freeze方法
str.freeze
str.gsub!(/b/,'xyz')  #会发生错误


Ruby的Modules和Mixins
====================================================
在一个类中使用include,可以把一个module中的方法变为这个类的实例方法;
使用extend,则可以把一个module中的方法变为这个类的类方法:

module MyModule
  def test
    puts "hello,module!"
  end
end

class MyClass

  include MyModule
 
end

MyClass.new.test

#######################
class MyClass2

  include MyModule

end

MyClass2::test


load和require:
================================================
load是在当前调用点插入目标文件中的代码或二进制资源,使其在插入点生效。
require和load差不多,只是如果已经装载过的话,则不再作装载。

 

创建自己的类
=================================================
一个典型的Ruby类的创建:
class MyClass

  NAME = "Class Name"  # class constant

  def initialize       # called when object is allocated
    @@count += 1
    @myvar = 10
  end

  def MyClass.getcount # class method
    @@count            # class variable
  end

  def getcount         # instance returns class variable!
    @@count            # class variable
  end

  def getmyvar         # instance method
    @myvar             # instance variable
  end

  def setmyvar(val)    # instance method sets @myvar
    @myvar = val
  end
  def myvar=(val)      # Another way to set @myvar
    @myvar = val
  end
end

foo = MyClass.new      # @myvar is 10
foo.setmyvar 20        # @myvar is 20
foo.myvar = 30         # @myvar is 30

有四个方法可以用来自动处理实例的数据访问:attr,attr_accessor,attr_reader,attr_writer,它们的参数都是使用symbol。

以上类中的相应数据访问可以使用这样简单的形式来实现:
attr_accessor :myval
(其实它自动生成了myval和myval=两个方法,来获取或设置@myval实例变量)


类的访问控制
==================================================
Ruby的类有private,protected和pulic这三个访问控制级别(类中的方法默认为public,除了initialize方法是private的[它通常被new方法来调用]),使用方法:

1.定义好方法,然后用private :methodname来作控制,如:
class MyClass
    def test
       "hello,world"
    end
 
    private :test
end

2.在方法定义前加private
class MyClass
    private
    def test
       "hello,world"
    end
 
    #之后定义的方法都为private,直到出现另外的访问控制方法
end


类的继承:
class ChildClass < SuperClass
end

super是用来访问父类的关键字

alias 可以给方法起别名,如:
class Test
 
  def test
    puts "aaaaaaaaa"
  end
 
  alias testx test
 
end

Test.new.testx


方法的可变参数
==================================================
用*定义的参数部分,可以接受不定个数的参数(以Array的形式存放)
def mymethod(a, b, *c)
  print a, b
  c.each do |x| print x end
end

mymethod(1,2,3,4,5,6,7)    # a=1, b=2, c=[3,4,5,6,7]



 

分享到:
评论

相关推荐

    JAVA OOP 第一章作业

    在"JAVA OOP 第一章作业"中,我们可以预期学生将接触到一系列基础但重要的面向对象编程概念。 1. 类与对象 类是OOP的基础,它是一个模板或者蓝图,定义了一组属性(数据成员)和行为(方法)。对象是类的实例,它们...

    JavaOOP_第1章上机练习.zip

    在"JavaOOP_第1章上机练习.zip"这个压缩包中,我们可以预见到它包含了关于Java OOP的初步学习材料,特别是针对初学者的上机实践练习。 在Java OOP中,有四个核心概念:封装、继承、多态和抽象。这些概念是理解Java ...

    长沙新华java第一章作业

    这个长沙新华java第一章作业是由我爱IT技术网的it人士做完后分享的,希望可以和大家一起交流it技术。

    Addison Wesley The Ruby Way 2Nd Edition Oct 2006.pdf(英文版)

    通过以上内容的详细讲解,《The Ruby Way》第二版为读者提供了全面且深入的Ruby编程知识体系,无论是对于初学者还是有经验的开发者而言,都是一本非常有价值的参考书籍。此外,读者还可以从作者提供的网站...

    prototype_oop_javascript_ruby_prototype_

    在JavaScript中,原型是实现OOP的一个关键机制,而在Ruby中,虽然使用的是类(Class)作为主要的OOP构造,但仍然可以找到与JavaScript原型模式相类似的思想。让我们深入了解一下这两个语言中的原型和面向对象编程。 ...

    JAVAOOP课本一到五章全套练习答案

    本压缩包包含了Java OOP课本一到五章的全套练习及答案,旨在帮助学习者深入理解和掌握这一关键编程技术。 第一章节通常会介绍OOP的基本概念,包括封装、继承、多态这三大特性。封装是隐藏对象的属性和实现细节,仅...

    Java OOP学习笔记

    Java面向对象编程(Object-Oriented Programming,简称OOP)是Java编程的核心,它通过封装、继承和多态三大特性来构建高效的代码结构。...因此,对于Java开发者来说,深入学习和实践OOP是非常重要的。

    JavaOOP_第6章上机练习.zip

    在这个名为"JavaOOP_第6章上机练习.zip"的压缩包中,我们可以预见到包含的是关于Java OOP的第六章练习题目,可能涵盖了类、对象、继承、接口、抽象类、访问修饰符、构造器、方法重写、多态性等相关主题。 1. 类与...

    JavaOOP_第2章上机练习.zip

    在本压缩包“JavaOOP_第2章上机练习.zip”中,主要涉及的是Java面向对象编程(Object-Oriented Programming,简称OOP)的相关知识。Java OOP是Java编程语言的核心特性,它允许我们将复杂的程序设计分解为一系列相互...

    北大青鸟s2JavaOOP第四章作业

    在北大青鸟S2 Java面向对象编程(OOP)的第四章作业中,我们主要探讨的是Java编程中关于面向对象的一些核心概念和技术。这个作业旨在通过模拟长江和黄河决堤的场景来锻炼学员们对类、对象、继承、封装、多态等OOP...

    JavaOOP01 第一章 对象和封装.pdf|01 第一章 对象和封装.pdf

    在Java编程语言中,面向对象编程(Object-Oriented Programming, OOP)是核心概念之一。本章将深入探讨OOP中的对象和封装这两个关键概念。 首先,让我们理解什么是对象。在计算机科学中,对象是类的实例。类是创建...

    JavaOOP_第5章上机练习.zip

    在"JavaOOP_第5章上机练习.zip"这个压缩包中,我们可以推测它包含了第五章关于Java OOP的实践练习内容。通常,OOP主要包含四个基本原则:封装、继承、多态和抽象。下面将详细讲解这些概念。 **封装** 是OOP的基础,...

    Ruby语言入门教程v1.0

    《Ruby语言入门教程v1.0》是一份详尽的指南,旨在为初学者提供一个易于理解的Ruby语言学习路径。下面,我们将深入探讨该教程所涵盖的关键知识点,特别是其标题和描述中提及的核心概念。 ### 1. 编程语言的发展简史 ...

    ruby 经典教程从新手到专家

    《Ruby经典教程:从新手到专家》是一本深入浅出介绍Ruby编程语言的权威指南,由Peter Cooper编写,why the lucky stiff作序推荐,专为Ruby爱好者和希望掌握Ruby编程技术的学习者设计。本书全面覆盖了Ruby编程的基础...

    From Java to Ruby

    《From Java to Ruby》这本书是Java开发者转向Ruby语言的一份宝贵资源。它引导读者了解从传统的Java编程环境过渡到Ruby的动态世界时所遇到的概念差异和技术挑战。Ruby是一种灵活、简洁且富有表现力的编程语言,它...

    深入.NET平台和C#编程(.NETOOP)第一章

    《深入.NET平台和C#编程》是一本专...第一章的学习是整个.NET和C#学习之旅的起点,它将为后续章节中更复杂的概念和框架技术打下坚实基础。通过深入理解和实践这些知识点,开发者可以更高效地利用.NET平台进行软件开发。

    Ruby脚本语言经典教程.pdf

    1. **面向对象编程(OOP)**:Ruby是一种纯面向对象的编程语言。这意味着在Ruby中,几乎任何事物都是对象,包括数字和字符串。Ruby中的面向对象编程可以让你以直观的方式编写代码,通过继承、封装、多态和抽象等概念...

Global site tag (gtag.js) - Google Analytics