2011-12-20 49 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