2011-12-20 47 views
3

假設我有一個三角形,三邊和三個角度。 S1,A1,S2,A2,S3,A3和我想通過triangle.new如何處理Ruby中三角形類的初始化方法

初始化這個下面是我的代碼:

module Triangle 
class Triangle 
    attr_accessor :s1, :a1, :s2, :a2, :s3, :a3 

    def initialize(s1, a1, s2, a2, s3, a3) 
    @s1 = s1 
    @a1 = a1 
    . 
    . 
    . 
    end 
end 
end 

現在,這裏是我的問題。我希望能夠處理缺少角度或邊的三角形。我玩過可選的參數,但如果你給我四個數字,我不知道哪個是側面,哪些是角度。要做的最好的事情是需要六個數字,然後用triangle.new(5,nil,6,nil,9,nil)之類的東西給他們打電話?或者,還有更好的方法?

回答

3

爲什麼不只是傳遞一個hash選項來初始化方法,像這樣:

class Triangle 
    attr_accessor :s1, :a1, :s2, :a2, :s3, :a3 

    def initialize(options) 
    @s1 = options[:s1] 
    @a1 = options[:a1] 
    . 
    . 
    . 
    end 
end 

有了這個,你可以這樣做:

Triangle.new({:s1 => 5, :s2 => 6, :s3 => 9}) 
+0

感謝。這聽起來不像我的代碼那樣。我知道我做錯了什麼。 – 2011-12-20 15:27:22

+0

在Ruby 1.9中,調用行可以是:'Triangle.new(s1:5,s2:6,s3:9,a1:7,a3:0)'使用新的散列傳遞語法。 – Linuxios 2011-12-20 15:34:04

+0

謝謝。我使用1.9。 – 2011-12-20 15:35:51