2012-02-03 46 views
0

編輯:已解決。多種數據類型不是罪魁禍首。下面的代碼工作正常。顯然,我在其他地方有一個不匹配的地方。類初始化中的多種數據類型(Ruby)

我是一名業餘程序員,也是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) 

的錯誤似乎是,它期待所有的參數是一個數據類型,如字符串,浮點或整數等

如何在我的類初始化方法中指定不同的數據類型?

+2

與其告訴我們你對錯誤的奇怪解釋,告訴我們錯誤信息實際上是什麼。 – 2012-02-03 07:37:48

回答

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 

更新:

沒有數據類型聲明的變量紅寶石,這意味着你不需要使用它之前指定(聲明)變量的數據類型。因此,下面是一個有效的代碼,

> 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"> 

它可以傳遞任何數據類型,這是開發商的責任,以確保您的數據是有效的。

+0

啊,哎呀!不過,我只是把它作爲一個例子寫的。我的實際代碼是正確的。 但是,我仍然有問題,我不能分配多個數據類型。 IE,name是一個字符串,x和y是整數。它可以工作,如果我將它們全部設置爲一個或另一個,但不是當我混合它們時,如下所示: user = User.new(「Bob」,4,4) – 2012-02-03 07:26:01

+0

使用模式代碼示例更新答案。 – nkm 2012-02-03 07:45:43

+0

更新 - 現在可以使用。我不確定我做錯了什麼。也許我在某些我沒有注意到的地方將它們錯配,並且無意中編輯和修復了它們。無論如何,感謝您的幫助! – 2012-02-03 10:48:26

0

您在示例中的「初始化」之前缺少「def」。

+0

這在我的例子中只是一個錯誤。在我的實際代碼中是正確的。我真正的問題在這裏: player = Player。新的(「Luke」,5,5) 我的初始化方法並不高興我混合字符串和整數。有沒有辦法做到這一點? – 2012-02-03 07:32:48

2

您的代碼在Windows中的Ruby 1.9.2p180中適用於我。我甚至增加這些線路巡檢數據和他們像預期的那樣:

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

請後表現出錯誤的簡化測試代碼,告訴我們你所得到的確切的錯誤信息,並告訴我們什麼版本的Ruby您正在使用。所有這些信息應該在你的第一篇文章中。見http://sscce.org/

+0

看起來罪魁禍首是在別的地方。我發現我寫的例子也適合我。在我的代碼中,它肯定是一個數據類型不匹配的地方,我無意中修復了它,因爲它現在也在那裏工作。感謝您的回覆! P.S.由於這個問題已經解決/回答,我現在應該做些什麼? – 2012-02-03 10:53:56