编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 [ruby-tut]对象......到处都是object!
指数 -> 编程,Ruby. -> 红宝石教程
查看上一个主题 可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 星期五02,2004 8:18 PM  帖子主题:[Ruby-Tut]对象......到处都是!

所以,了解如何做简单的输入和输出,测试条件,定义方法和构造循环,下一步是什么?

此时,可以了解类和对象以及所有面向对象的内容。何苦?这是一个很好的问题,简单但正确的答案是它是因为对象是Ruby的核心,真正了解Ruby你需要了解类和对象。

当然,这只是“为什么我在丝毫关于Ruby的情况下打扰时答案的答案?”该问题的答案只能通过使用它来实现,甚至它更像是一个潜意识的实现。你没有这么多意识到你对你有多少钱,因为你来欣赏你的繁琐少量赔率和结束你 不是 doing.

类是对象的蓝图。它们定义了对物体的布局以及它可以做的事情。实例变量是存储在对象中的信息,方法是对象可以做的。

在Ruby中,所有实例变量都是私有的。无法被其他对象直接访问它们。也默认情况下,Ruby类中的方法是公开的。它们可以私有或受保护,但不能为实例变量进行相同的。

这背后的推理是定义对象的接口。实例变量允许对象保持某个状态。由于其他对象不关心对象的实例变量,因此它们不是预定义的,并且可以自由添加,只要更改不会改变对象从外部的样子。

红宝石使这种方法不需要括号更加自然。它可以 感觉 就像您访问实例变量一样,但现实是您可以访问一种方法,又返回实例变量。

作为一个简单的例子,让我们创建一个定义名称的简单类。

代码:
班级名称
   def initialize(first, last)
     @first,@last =首先,最后
   end
结尾


这里“初始化”有些像其他语言的构造函数,除了它是一种正常方法,可以随时使用。它只是通过类本身的“新”方法调用它是一种调用的方法。

但我拔下来......

“类方法”?记住, 一切 在Ruby是一个对象,这甚至延伸到课程。结果类可以具有变量和方法。 “新”类方法只需取样数量的参数,然后将这些方法传递到初始化方法上,该方法是设置对象初始条件的工作。当然,“新”也处理内存分配,但没有必要担心这一点。

传递那些参数,Ruby对*运算符有另一个用于“削减”额外参数的*运算符。

代码:
def foo.(*extra_args)
   after_args.each {| arg |把arg}
结尾


在这个简单的例子中,“extra_args”成为包含所有其他参数的数组。现在在Ruby中,默认情况下,数组只是一个对象,通常将其传递给Asan参数,它被视为一个参数。但是,我们可以强迫它在列表的上下文中进行评估。例如,我们将将数组传递给foo作为一个参数,作为列表。

代码:
Foo([1, 2, 3, 4])

Foo(*[1, 2, 3, 4])


后者相当于:

代码:
Foo(1, 2, 3, 4)


那说......

返回我们定期的教程

代码:
@first,@last =首先,最后


@符号看起来相当奇怪,但是是指定实例变量的简单方法,而不是局部变量。类变量由@@和全局变量识别,以$为前缀。

将实例变量视为“全局”到所有特定对象的方法。类变量本质上是给定类的所有对象的全局。全局变量是全局的......好吧......一切。

使用=操作员在此处看起来有点奇数,但这是标准的Ruby行为。右侧的第一个变量被分配给左侧等的第一个变量/值。如果右侧的右侧有更多的变量/值,则会忽略多余的。

例如,在下文中,忽略3。

代码:
A,B = 1,2,3


但是,我们可以使用这里的方法中看到的相同速度行为。

代码:
a,* b = 1,2,3


这里“a”变为1,但“b”现在是一个有2和3的阵列。

其他可能性是右侧没有足够的值。

代码:
a,b,c = 1,2


在这种情况下,“a”是1,“b”是2,“c”是“nil”。

再次回到主题

所以现在我们可以使用名字和姓氏创建一个名称对象。要创建新名称对象是一项简单的任务。

代码:
bobs_name = name.new.("Bob", "Smith")


现在,正如我之前提到的那样,实例变量始终是私密的,所以我们无法在这个阶段找到它们。但是,我们可能希望该访问权限,因此让我们修改类以添加两个变量的访问者方法。

代码:
班级名称
   def initialize(first, last)
     @first,@last =首先,最后
   end
   
   def first
      @first
   end
   
   def last
      @last
   end
结尾


很容易,不是吗?幸运的是Ruby可以让它变得更加容易。为自动创建如此简单的访问者方法,有attr *关键字。由于我们只读取第一个和姓氏的值,而且没有尝试更改它们,我们只需使用“attr_reader”。

代码:
班级名称
   attr_reader :first, :last

   def initialize(first, last)
     @first,@last =首先,最后
   end
结尾


当然,现在我们想要输出名称。

代码:
bobs_name = name.new.("Bob", "Smith")

put"#{bobs_name.first}#{bobs_name.last}"


但也许我们应该有一种方法,该方法返回具有该格式的名称的字符串。也许一个返回像“史密斯,鲍勃”这样的东西。前者我们期望更常见,因此我们将别名为该方法,以便将其自动使用该格式。

代码:
班级名称
   attr_reader :first, :last

   def initialize(first, last)
     @first,@last =首先,最后
   end
   
   def full_name
      "#{first} #{last}"
   end
   
   alias :to_s :full_name
   
   def reverse_full_name.
      "#{last}, #{first}"
   end
结尾


代码:
bobs_name = name.new.("Bob", "Smith")

putbobs_name
putbobs_name.reverse_full_name


最后一个古怪的事情

与大多数其他语言不同,Ruby中的课程并没有真正完成。如果您应该在稍后决定添加内容,您可以轻松地添加。例如,我们是否希望一种在名称对象中切换第一个和姓氏的方法,我们可以轻松完成。为什么我们想要完全是另一个故事。

假设名称类的前一个定义。

代码:
班级名称
   def switch_names!
     @first,@last = @last,@first
   end
结尾


这对简单的东西来说几乎是如此。
赞助
赞助
赞助
赞助
Tokenherbz.




邮政发布: 2006年3月25日星期六8:23 PM  帖子主题:Re:[Ruby-Tut]对象......到处都是物体!

WTD写道:

这对简单的东西来说几乎是如此。


我讨厌看到辛苦的东西:s
rdrake.




邮政发布: 太阳3月26日,2006年9:41 PM  帖子主题:Re:[Ruby-Tut]对象......到处都是物体!

tokenherbz写道:
我讨厌看到辛苦的东西:s
请记住,如果您有任何疑问,请询问此处,IRC频道,或WTD / MINSC / MYSIC / HIKARU79 /其他。我们很乐意帮助你。
WTD.




邮政发布: 2006年3月27日星期八:下午1:27  帖子主题:(没有主题)

一旦你遇到问题就要问。当有人要求帮助“第8章”时,它真的使提供帮助难以揭示他们以后没有通过“第3章”。

微笑
从上一个显示帖子:   
   指数 -> 编程,Ruby. -> 红宝石教程
查看上一个主题 告诉一个朋友可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 4 Posts ]
跳到:   


Style:  
搜索: