编辑:已解决。多种数据类型不是罪魁祸首;下面的代码工作正常。显然,我在其他地方遇到了不匹配。
我是一名业余程序员,也是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)
错误似乎是期望所有参数都是一种数据类型,例如字符串,浮点数或整数等。
如何在类初始化方法中指定不同的数据类型?
答案 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)
您在代码中遗漏了def
,def
是定义方法的关键字,而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”。