Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497489
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:34:06

下载本文示例代码
  变量与赋值  至此,你是否注意到前面所有的示例代码中都缺少某种东西?难道你必须输入常数,实例变量或类变量?绝对不是!这正是Ruby的真正面向对象的天性的一部分。为此,首先让我们看一下Ruby中以前的普通变量。至此,你已经创建了很多Rectangle实例,但是你并没有把它们保留多长时间。比方说,你想要把一个变量赋值给你创建的一个Rectangle实例: myRectangle = Rectangle.new(4,5)  在Ruby中这是完全有效的代码,而且根本不需要另一行代码来把myRectangle类型化或声明为引用Rectangle的某种东西。在执行这一行代码以后,变量myRectangle就引用一个Rectangle的实例(高度和宽度值分别为4,5)。但是,这仅是一种在任何时刻都可以更改的对象引用,而与对象的类型无关(在Ruby中一切都是对象)。因此,下面的命令提示符行中,你可以容易地把myRectangle赋值给一个字符串: irb(main):049:0< myRectangle=Rectangle.new(4,5)=> #irb(main):050:0< myRectangle="Jim's Rectangle"=> "Jim's Rectangle"  你可以在许多其它程序语言(甚至包括象Java这样的面向对象的语言)中试验一下,并观察从你的IDE所产生的编译错误。  变量,实例变量,类变量,甚至还有"常量"其实都只是对象引用。它们引用对象,但是它们并不是对象本身。因此,它们可以被动态地改变,甚至引用另一种不同类型的对象。   因为这一灵活性,所以必须在Ruby中进行一些约定以帮助每个人都知道某个变量正为代码所使用。其实,你已经看到了其中之一(@符号,它意味着这是一个实例变量)。其它的变量,方法和类命名约定列于下表1中。  · 局部变量和方法参数以一个小写字母开头。  · 方法名字以一个小写字母开头。  · 全局变量以一个$开头。  · 实例变量以一个@开头。  · 类变量以两个@开头。  · 常数以一个大写字母开头(它们经常被指定全部大写)。  · 类和模块名以一个大写字母开头。 局部变量 全局变量 实例变量 类变量 常数 类名 方法名 aVar $Var @var @@var VAR MyClass myMethod name $debug @lastName @@interest PI Rectangle area        表1.这个表包含了在Ruby编码约定下的相关示例。  操作符方法  现在,假定你想实现合并Rectangle类的实例或把它们添加到另一个Rectangle实例。你当然可以定义另外一个称为"add"的方法,这种选择利用了Ruby真正的面向对象的特征之一。然而,你还可以重载" "运算符来适当地把两个Rectangle实例加起来。这个" "方法(如4 5),对Ruby来说,只是另外一个方法而已。由于只是"另外一个方法",所以你可以给它增加一些功能来满足Rectangle类的需要。例如,你还可以定义" "运算符来实现一个矩形面积加上另一个矩形面积。 def (anotherRectangle)totalArea = area() anotherRectangle.area()Rectangle.new(@height,totalArea/@height)end  在把这个方法添加到Rectangle类以后,你可以使用 方法调用来把两个Rectangle的实例相加: irb(main):001:0> rect1=Rectangle.new(2,3)=> #irb(main):002:0> rect2=Rectangle.new(3,4)=> #irb(main):003:0> rect1 rect2=> #  这正是操作符重载,对于那些使用过Agol,C ,Python和其它语言的用户来说,可能已经非常熟悉这个特征。  方法参数  至此,我们一直假定,传递给一个方法的参数个数是已知的。也许在其它语言中不可思议,但是Ruby的确允许你传递可变个数的参数并且以单个参数来捕获它们。为了创建一个可变长度的参数,只需要把一个星号(*)放在最后一个参数前面即可。这样,你就可以在Ruby中编写一个如下的多边形定义。 class Polygondef initialize (s1,s2,s3,*others)@sideOne = s1@sideTwo = s2@sideThree = s3@otherSides = othersendend  如下所示,你可以使用这个定义来创建一个三角形或一个六边形。 irb(main):009:0> poly1=Polygon.new(2,4,5)=> #irb(main):010:0> poly2=Polygon.new(2,18,4,5,7,9)=> #  在支持可变长度参数的同时,Ruby还允许定义一个方法参数的默认值(在调用者没有提供的情况下使用)。例如,下面是Rectangle类的一个更好的初始化表达。 def initialize (hgt = 1, wdth = 1)@height = hgt@width = wdthend  现在,在调用时如果省略了某参数,那么在定义中参数紧邻的赋值运算符担当一个缺省的赋值器。现在,当创建一新的矩形时,如果在调用时省略了宽度,那么一个适当的宽度也会被默认地提供: irb(main):090:0> rect=Rectangle.new(2)=> #   变量与赋值  至此,你是否注意到前面所有的示例代码中都缺少某种东西?难道你必须输入常数,实例变量或类变量?绝对不是!这正是Ruby的真正面向对象的天性的一部分。为此,首先让我们看一下Ruby中以前的普通变量。至此,你已经创建了很多Rectangle实例,但是你并没有把它们保留多长时间。比方说,你想要把一个变量赋值给你创建的一个Rectangle实例: myRectangle = Rectangle.new(4,5)  在Ruby中这是完全有效的代码,而且根本不需要另一行代码来把myRectangle类型化或声明为引用Rectangle的某种东西。在执行这一行代码以后,变量myRectangle就引用一个Rectangle的实例(高度和宽度值分别为4,5)。但是,这仅是一种在任何时刻都可以更改的对象引用,而与对象的类型无关(在Ruby中一切都是对象)。因此,下面的命令提示符行中,你可以容易地把myRectangle赋值给一个字符串: irb(main):049:0< myRectangle=Rectangle.new(4,5)=> #irb(main):050:0< myRectangle="Jim's Rectangle"=> "Jim's Rectangle"  你可以在许多其它程序语言(甚至包括象Java这样的面向对象的语言)中试验一下,并观察从你的IDE所产生的编译错误。  变量,实例变量,类变量,甚至还有"常量"其实都只是对象引用。它们引用对象,但是它们并不是对象本身。因此,它们可以被动态地改变,甚至引用另一种不同类型的对象。   因为这一灵活性,所以必须在Ruby中进行一些约定以帮助每个人都知道某个变量正为代码所使用。其实,你已经看到了其中之一(@符号,它意味着这是一个实例变量)。其它的变量,方法和类命名约定列于下表1中。  · 局部变量和方法参数以一个小写字母开头。  · 方法名字以一个小写字母开头。  · 全局变量以一个$开头。  · 实例变量以一个@开头。  · 类变量以两个@开头。  · 常数以一个大写字母开头(它们经常被指定全部大写)。  · 类和模块名以一个大写字母开头。 局部变量 全局变量 实例变量 类变量 常数 类名 方法名 aVar $Var @var @@var VAR MyClass myMethod name $debug @lastName @@interest PI Rectangle area        表1.这个表包含了在Ruby编码约定下的相关示例。  操作符方法  现在,假定你想实现合并Rectangle类的实例或把它们添加到另一个Rectangle实例。你当然可以定义另外一个称为"add"的方法,这种选择利用了Ruby真正的面向对象的特征之一。然而,你还可以重载" "运算符来适当地把两个Rectangle实例加起来。这个" "方法(如4 5),对Ruby来说,只是另外一个方法而已。由于只是"另外一个方法",所以你可以给它增加一些功能来满足Rectangle类的需要。例如,你还可以定义" "运算符来实现一个矩形面积加上另一个矩形面积。 def (anotherRectangle)totalArea = area() anotherRectangle.area()Rectangle.new(@height,totalArea/@height)end  在把这个方法添加到Rectangle类以后,你可以使用 方法调用来把两个Rectangle的实例相加: irb(main):001:0> rect1=Rectangle.new(2,3)=> #irb(main):002:0> rect2=Rectangle.new(3,4)=> #irb(main):003:0> rect1 rect2=> #  这正是操作符重载,对于那些使用过Agol,C ,Python和其它语言的用户来说,可能已经非常熟悉这个特征。  方法参数  至此,我们一直假定,传递给一个方法的参数个数是已知的。也许在其它语言中不可思议,但是Ruby的确允许你传递可变个数的参数并且以单个参数来捕获它们。为了创建一个可变长度的参数,只需要把一个星号(*)放在最后一个参数前面即可。这样,你就可以在Ruby中编写一个如下的多边形定义。 class Polygondef initialize (s1,s2,s3,*others)@sideOne = s1@sideTwo = s2@sideThree = s3@otherSides = othersendend  如下所示,你可以使用这个定义来创建一个三角形或一个六边形。 irb(main):009:0> poly1=Polygon.new(2,4,5)=> #irb(main):010:0> poly2=Polygon.new(2,18,4,5,7,9)=> #  在支持可变长度参数的同时,Ruby还允许定义一个方法参数的默认值(在调用者没有提供的情况下使用)。例如,下面是Rectangle类的一个更好的初始化表达。 def initialize (hgt = 1, wdth = 1)@height = hgt@width = wdthend  现在,在调用时如果省略了某参数,那么在定义中参数紧邻的赋值运算符担当一个缺省的赋值器。现在,当创建一新的矩形时,如果在调用时省略了宽度,那么一个适当的宽度也会被默认地提供: irb(main):090:0> rect=Rectangle.new(2)=> # 下载本文示例代码


Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值Ruby程序设计语言快速入门之变量与赋值
阅读(172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~