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

用户名:   Password: 
 登记登记   

 Wiki.Wiki.   博客博客   搜索搜索   图灵图灵   聊天室  成员成员 
 结构和记录类型
指数 -> 编程,Ruby. -> 红宝石教程
查看上3d中奖规则主题 可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下3d中奖规则主题
作者 信息
WTD.




邮政发布: 孙8月07日,2005年2:57 PM  帖子主题:结构和记录类型

我们为什么要这些?

当您想要将两个或多个相关数据组合在一起时,有时候正在编程,以创建3d中奖规则复杂的“东西”。通过将此数据分组在一起,避免使其存储在多个变量中,并且必须单独传递它们。

3d中奖规则例子

假设你正在写3d中奖规则非常简单的RPG。现在,代表3d中奖规则字符,你给它3d中奖规则名字,种族和攻击,防守,运动和健康评级。因此,我们可以创建3d中奖规则特定的聊天:

代码:
Moglen.._the_treacherous_lawn_gnome_name = "Moglen"
Moglen.._the_treacherous_lawn_gnome_race = "Gnome"
#yada yada


所以现在让我们假设我们有一种方法,它在字符上打印出信息。

代码:
print_character_info.(moglen_the_treachery_lawn_gnome_name,
   moglen_the_treachery_lawn_gnome_race,
   moglen_the_treachery_lawn_gnome_attack,
   moglen_the_treachery_lawn_gnome_defense,
   moglen_the_treachery_lawn_gnome_movement,
   moglen_the_treachery_lawn_gnome_health.)


哇,这是乏味的!

相反,如果我们有3d中奖规则持有所有MOGLEN的信息的变量,该怎么办?

更好的方法,以及中途的自由

在Ruby中,这是我们使用类和对象的地方。使用对象,我们避免直接访问包含在内的变量。相反,我们隐藏它们,并且只允许程序员虽然仔细定义的方法,但程序员可以操纵它们。这是3d中奖规则明智的预防措施。

当然,Ruby足够灵活,让您避开所有这些,并且基本上有直接的Acess,并不用担心在对象中保持理智状态。 眨眼

我们可以使用struct类。 struct的类初始化程序取得成员的名称列表,然后动态创建3d中奖规则类与这些变量和访问者方法。

代码:
character = struct.new(:name, :race, :attack, :defense, :movement, :health)


然后,我可以很容易地创建Moglen,并轻松访问他的信息。

代码:
Moglen.._the_treachery_lawn_gnome = character.new.new.("moglen", "gnome", 1, 3, 0, 10)

把moglen_the_treachere_lawn_gnome.name.name.


扩展结构

当然,Ruby中的结构只是具有许多访问者方法的对象。那么,我如何将其用作我的优势?嗯,让我们说所有的GNOMES都有默认的评分。因此,我不应该指定每次创建新GNOME的时间。而且,对于这事,我必须指定它是3d中奖规则gnome。

代码:
侏儒类< Character
   def initialize(name)
      super("", "Gnome", 1, 3, 0, 10)
      @name = name
   end
结尾


现在,我可以创建Moglen:

代码:
Moglen.._the_treacherous_lawn_gnome = Gnome.new("moglen")
赞助
赞助
赞助
赞助
塞万提斯




邮政发布: 2005年8月08日星期八7:00  帖子主题:(没有主题)

谢谢wtd!这是如此典雅简单,如此强大。

但是我有3d中奖规则小问题:为什么你在你的gnome课上有这条线?
代码:

@name = name.

我知道你想要做什么,但我不认为它有效。我在IRB中测试了这一点,我的精灵并没有保留他的名字。然而,侏儒保持着名。他们的班级如下所示:
代码:

侏儒类< Character
   def initialize(name)
      super(name, "Gnome", 1, 3, 0, 10)
   end
结尾


再次感谢,WTD!
WTD.




邮政发布: 2005年8月08日星期八12:07 PM  帖子主题:(没有主题)

塞万提斯写道:
谢谢wtd!这是如此典雅简单,如此强大。

但是我有3d中奖规则小问题:为什么你在你的gnome课上有这条线?
代码:

@name = name.

我知道你想要做什么,但我不认为它有效。我在IRB中测试了这一点,我的精灵并没有保留他的名字。然而,侏儒保持着名。他们的班级如下所示:
代码:

侏儒类< Character
   def initialize(name)
      super(name, "Gnome", 1, 3, 0, 10)
   end
结尾


再次感谢,WTD!


好的,你的版本更好。我不与结构交易很多,所以我猜他们的内部组织有点不同于我想的。

“@name = name”正在创建实例变量。 “@”表示变量的范围扩展到当前方法到整个对象。因此,在初始化中创建的“@name”可用于所有其他方法。

但是,它在物体之外不可用。
Rizzix.




邮政发布: 2005年8月08日星期八:下午3:30  帖子主题:(没有主题)

您对Ruby自动扼杀了3d中奖规则实例变量的访问器和virator方法吗?它们为变量“名称”是什么。

而不是直接修改@name,使用相应的virator ..不会那么工作吗?
WTD.




邮政发布: 2005年8月08日星期八7:08 PM  帖子主题:(没有主题)

Rizzix写道:
您对Ruby自动扼杀了3d中奖规则实例变量的访问器和virator方法吗?它们为变量“名称”是什么。


例如,在结构中的变量,是的。不是任何类中的例子。您必须使用attr,attr_reader,attr_writer或attr_accessor方法。

Rizzix写道:
而不是直接修改@name,使用相应的virator ..不会那么工作吗?


是的。

代码:
self.name = name.
Rizzix.




邮政发布: 2005年8月08日星期八7:27 PM  帖子主题:(没有主题)

是的...

等待......偏僻突变者?
WTD.




邮政发布: 2005年8月08日星期八:下午8:37  帖子主题:(没有主题)

代码:
IRB.(main):001:0> class Foo
IRB.(main):002:1>    attr_accessor :bar, :baz
IRB.(main):003:1>
IRB.(main):004:1*    def initialize(bar, baz)
IRB.(main):005:2>       @bar,@baz = bar,baz
IRB.(main):006:2>    end
IRB.(main):007:1> end
=> nil
IRB.(main):008:0> f = Foo.new(42, 37)
=> #<Foo:0x2dbb288 @ bar = 42,@ baz = 37>
IRB.(main):009:0> f.bar = 23
=> 23
IRB.(main):010:0> f
=> #<Foo:0x2dbb288 @ bar = 23,@ baz = 37>
IRB.(main):011:0>
从上3d中奖规则显示帖子:   
   指数 -> 编程,Ruby. -> 红宝石教程
查看上3d中奖规则主题 告诉3d中奖规则朋友可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下3d中奖规则主题

11  [ 7 Posts ]
跳到:   


Style:  
搜索: