类初始化中的多种数据类型(Ruby)

时间:2012-02-03 06:56:48

标签: ruby class types initialization

编辑:已解决。多种数据类型不是罪魁祸首;下面的代码工作正常。显然,我在其他地方遇到了不匹配。

我是一名业余程序员,也是Ruby的新手。我正在尝试创建一个可以使用多种数据类型初始化的类。我的意思是:

我说,有一个“玩家类”。我想通过设置名称(字符串)和x和y位置(在这种情况下为整数)来初始化它。但是,当我这样做时,我收到错误:

#Player class containing name:string, x:integer, y:integer
class Player
  attr_accessor :name, :x, :y
  def initialize(name,x,y) #Edit: I forgot to put "def" here in my example. This was not my problem, though.
  @name = name
  @x = x
  @y = y
  end
end

#Create player "Luke" at x:5, y:5
player = Player.new("Luke",5,5)

错误似乎是期望所有参数都是一种数据类型,例如字符串,浮点数或整数等。

如何在类初始化方法中指定不同的数据类型?

3 个答案:

答案 0 :(得分:2)

您的代码在Windows中的Ruby 1.9.2p180中适用于我。我甚至添加了这些行来检查数据,它们的行为符合预期:

p player.name  # => "Luke"
p player.x     # => 5
p player.y     # => 5

请发布显示错误的简化测试代码,告诉我们您收到的确切错误消息,并告诉我们您正在使用的Ruby版本。所有这些信息都应该在你的第一篇文章中。请参阅http://sscce.org/

答案 1 :(得分:0)

您在代码中遗漏了defdef是定义方法的关键字,而initialize是该类的constructor(将在新的时候调用创建了类的实例。)

#Player class containing name:string, x:integer, y:integer
class Player
  attr_accessor :name, :x, :y
  def initialize(name,x,y)
    @name = name
    @x = x
    @y = y
  end
end

更新

ruby​​中没有变量的数据类型声明,这意味着在使用变量之前不需要指定(声明)变量的数据类型。因此,以下是有效的代码,

> var = "Robert George"
 => "Robert George" 
> var = "2010"
 => "2010"

因此

> Player.new("Robert George", 10, 12)
 => #<Player:0x999b3a4 @name="Robert George", @x=10, @y=12> 
> Player.new(10, 12, "Wrong data")
 => #<Player:0x9976158 @name=10, @x=12, @y="Wrong data">

它适用于您传递的任何数据类型,开发人员有责任确保您的数据有效。

答案 2 :(得分:0)

您在示例中“初始化”之前缺少“def”。