`
凌川__
  • 浏览: 84016 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论
文章列表
变量一定要有类型吗(二) 变量一定要有类型吗?不一定。 在《The Ruby Way 2nd》一书中,1.2.3节 Constants, Variables, and Types “In Ruby, variables do not have types, but the objects they refer to still have types. ” 在Ruby中,变量没有类型,但变量引 ...
先讨论一下Ruby是不是强类型。 1).在《Beyond Java》September 2005 一书  6.1.2节Typing  中,Bruce Tate举例      irb(main):015:0> "fish"+4     TypeError: cannot convert Fixnum into String             from (irb):15:in‘+’               from (irb):15 从而得出结论: 引用 That means Ruby is strongly typed. 我们知道,Ruby是动态语言,在运 ...
先看一句代码: ruby 代码  (1..9).each {|i| print  i  if  i<7}    # =>123456   迭代器each 是数组类的一个方法;大括号{  }里的代码是代码块,简称块。你可以用大括号{  }将代码组织成块,也可以用 do…end将代码组织成块。大括号{  }的优先级高于do…end。 我们来写一个最简单的块; ruby 代码 #E8.4-1.rb       def one_block      yield     yield     yield   ...
一本入门小书,不想涉及正则表达式,但是正则表达式与Ruby语言联系如此紧密,总让人感觉绕不开它。所以匆匆结束字符串的介绍,边学边说正则表达式。 正则表达式之强大、复杂,由来已久。自从1956年提出了“正则集代数”,正则表达式就逐渐被广泛地应用于操作系统,编程语言,算法设计,人工智能…… 现在,除了Perl这样支持强大正则表达式功能的语言之外,Java,JavaScript, C# 等语言都纷纷支持正则表达式,只不过支持的程度不同。而Ruby正是一种强烈而灵活地支持正则表达式的语言。 下面,我努力尝试尽可能简单地描述Ruby中的正则表达式。 正则表达式(regular expression)描述了 ...
一. 生成一个字符串 字符串是String类的对象,一般使用字面值来创建。 ruby 代码 #E8.2-1.rb       str1 = 'this is str1'    str2 = "this is str2"   str3 = %q/this is str3/    str4 = %Q/this is str4/    ...
一. 建立一个数组 ruby 代码 #E8.1-1.rb       arr1=[]    arr2=Array.new   arr3=['4 ','5 ','6 ']       print arr1,  "\n"   print arr2,  "\n"   print arr3,  "\n"   运行结果: >ruby E8.1-1.rb 4 5 6 >Exit code: 0 二. 访问数组元素 Ruby以整数作为下标,访问数组 ...
程序 E7.3-1.rb中先写了Me模块,然后include  Me模块,实现了Mix-in功能,但是,这样没能做到代码复用。 我将 Me模块写在文件 E7.4-1.rb中,将 Person类写在文件 E7.4-2.rb中,这时候 Student类如何使用 Me模块和 Person类呢?这里要用到require方法。 看程序 E7.4-3.rb : ruby 代码 #E7.4-3.rb      require "E7.4-1"   require "E7.4-2"      class Student < ...
糅和,也译作混合插入,也许就称作 Mix-in 比较合适。 现实生活中,一个乒乓球不仅是球类物体,也是有弹性的物体。 C++ 支持多重继承,多重继承有时会导致继承关系的混乱,Java只提供了单继承,通过接口可以得到多重继承的优点,又没有多重继承的缺点。Ruby 也是单继承,不是通过接口,而是通过Mix-in 模块,来实现多重继承的优点。 模块的第三个作用:实现了类似多重继承的功能。 我们有一个Student类,有着Person类的属性和方法,还会做数学题——求平方根。已经有了Me模块,只要Mix-in 在Student类里就可以了。 看程序 E7.3-1.rb : ruby 代码 ...
7.1  模块 我们常常把许多零散的小物件放在一个盒子里,或者放在一个抽屉里,这些小物件可能是铅笔,墨水,字典等学习用品,也有可能是不相关的几件物品。在程序中,相关的、不相关的代码的组合,叫作模块。一般情况下 ...

6.5 访问控制

在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象的方法。控制了对方法的访问,也就控制了对对象属性的访问。 控制对方法的访问,有三种方式:  访问控制 意义 public 
学习编程的过程,就是深化理解变量的过程。在面向对象编程中也不例外,这一节,我们继续深化理解变量。 先把 Ruby 放在一边,从编程语言的视角来探讨变量。 如果一个变量,第一次赋值后,就不再允许改变变量值,这样的变量称之为常变量,简称常量。就像数学分析中的常函数,y = 3 是一个平行于 x 轴,并且函数值总是为 3 的函数。常量名用大写字母开头。 如果一个变量,在其作用域上的每一个执行点,都可以改变变量值,这样的变量称之为可变量,简称变量。 如果一个变量,其作用域遍及在程序的任何位置,这样的变量称之为全局变量;与之相对,作用域仅限于在程序的某一单元的变量,称之为局部变量。 面向对象的编程,以类为 ...

6.4 单例方法

同一份设计蓝图(类),不同的实例对象,可以表现出不同的行为特征,这种(不牵涉继承的)多态性在Java 这样的静态语言里,通过方法重载得到具体实现。6.1节中我们分析知道了Ruby中的重载是指重写,Ruby 如何来反映不同实例对象的不同行为特征呢? 在Ruby里,可以给具体的实例对象添加实例方法,这个方法只属于这个实例对象,我们把这样的方法称之为单例方法。 看程序  E6.4-1.rb : ruby 代码 #E6.4-1.rb      class Person        def talk        puts "Hi! "   ...
如果我们只是想增强父类的方法,而不是完全地替代它,就可以用关键字super指明。看程序  E6.2-1.rb :Person类的talk方法只是报告姓名。 Student类的talk方法用super来调用Person类的talk方法,报告姓名;随后又加上了一条语句,来表明身份。 ruby 代码 #E6.2-1.rb    class Person         def talk(name)        print "my name is #{name}."     end     end      cl ...
在Java 中,重载(overload)和重写(override)是用来表现多态性的两种重要方式。override 也有译作“覆盖”、“覆写”。Java 中称作“覆写”比较恰当。 重载方法是指一个类中,方法名相同、参数列表不同的几个方法,调用时根据不同的参数调用不同的方法。方法重载与返回类型无关。 覆写方法是指子类有一个方法,方法名、参数列表、返回类型与父类的某个方法完全一致。调用时会调用子类的方法,而屏蔽掉父类的同名方法。需要注意的是,子类覆写的方法,其可访问性一定要强于或等同于,父类被覆写的同名方法。 覆写发生在子类和父类之间,当然也可以是子类和父类的父类之间。重载不仅仅是发生在子类和父类之 ...
这里不是 Ruby语言的编码约定,只是建议,很少的一些建议。在语法正确的前提下,你可以按照自己的编码风格自由组织你的代码。 一. 命名 常量全用大写的字母,用下划线分割单词。例如:MAX, ARRAY_LENGTH。 类名和模块名用大 ...
Global site tag (gtag.js) - Google Analytics