对象的使用

对象是Ruby作为编程语言的基石。 几乎所有事物都是一个对象,并且对象很容易处理。 它们具有基类模板,可让您创建新对象,允许对象具有属性并允许在其上调用方法。

以下是汽车课的例子

 类车 
attr_reader:color,:name
@@ all = []
  def initialize(名称,颜色) 
@name =名称
@color =颜色
@@ all <<自我
结束
  def self.all 
@@所有
结束
  def驱动器 
放置“#{self.name}消失。”
结束
  def self.find_car_by_name(名称) 
self.all.select做|汽车|
car.name ==名称
结束
结束
 结束 

使用ObjectClass.new方法创建一个对象(通常带有属性)

  car1 = Car.new(“ Lightning McQueen”,“ red”) 

这将创建car类的实例,即car对象。 它的属性可以称为

  car.name ==>“闪电麦昆” 

并可以在其上调用方法(例如上述方法属性,也可以是自定义方法)

  car1.drive ==>“闪电麦奎因正在清理。” 

也可以在类中定义类方法,这些方法可以在整个类本身上运行,而不是在类的实例上运行。

  car1 = Car.new(“ Lightning McQueen”,“ red”) 
car2 = Car.new(“ Doc Hudson”,“ blue”)
  Cars.find_car_by_name(“闪电麦昆”)==> [car1] 

对象的用途之一是使存储和检索信息更加容易。 如果您在不使用物品的情况下玩交易纸牌游戏,则每次发牌时,您都需要输入所有必要的信息。

 手= [] 
手<< [名称,马力,攻击力,成本,稀有度]

您将最终得到一个充满数组的手动数组(或者,如果选择走那条路线则为哈希)。 然后,如果该卡从您的手中移到其他地方,则所有这些信息都必须再次完全转移。

 栏位= [] 
字段<< [名称,马力,攻击,成本,稀有度]

此外,如果卡公司决定在攻击后添加一个额外的统计信息,称为防御

  [名称,马力,攻击,防御,成本,稀有度] 

现在,任何尝试检索卡成本的代码现在都将检索其防御,而所有内容都必须重新编写。

但是,如果使用对象,则在对象具有其所有属性创建一次之后,只需要传递对象本身即可。

  card1 = Card.new(名称,hp,攻击,花费,稀有度) 
手<<卡1
字段<< card1

而且,如果添加了新的统计信息,则只需更改initialize方法以包括防御即可,其他所有功能都将保持相同状态,因为属性不是通过位置访问,而是通过属性名称访问。

  card1.name ==>名称 

当在视频游戏中表示事物时,对象特别有用,因为视频游戏的敌人和盟友通常是一种具有名称,攻击,生命值,能力等属性的奇异事物,可以用对象完美地表示。 例如,在炉石传说中有一张牌:

只要这张卡在一次攻击中没有被杀死,就会召唤一张额外的副本。 但是,这张卡召唤的副本在召唤时仍保留统计信息。 如果软泥怪是5/2,则召唤另外5/2软泥怪而不是新的2/4软泥怪。 最好的方法是将该卡作为对象,并在对象内跟踪具有hp和Attack属性的对象,而不是拆分具有完全相同状态的实例化对象时。

在英雄联盟之类的MOBA中,您可以通过统计信息和地图上的位置来控制角色。 角色将是一个具有HP,攻击,装甲和物品等属性的对象,还有位置坐标,该位置坐标会根据您在地图上的位置而不断更新,并确定攻击是否与您联系。 如果没有对象不断更新x,y坐标,将很难保持跟踪。

对象非常适合跟踪包含各种属性的内容,尤其是当它们可以更改并需要记住这些值时。 无论是跟踪级别和赢/输的帐户,还是角色不断壮大的角色,或者可以更改其属性的纸牌,对象都非常适合代表视频游戏中的几乎所有内容。