2010-08-05 42 views
2

我有一些方法返回數組,如["1", "3", "2", "6", "2"]。這些可以是字符串數組,而不是數字。我有另一種方法需要一個數組,並將它變成一個單一的字符串,如這個1 3 2 6 2紅寶石鏈式方法和返回數組

class Turn 
    def initialize 
    @rolls = 1 
    @dice = [] 
    end 

    def roll 
    @roll = [] 
    x = 5 - @dice.length 
    x.times do |i| 
     @roll[i] = rand(6) + 1 
    end 
    @roll # ["1", "3", "2", "6", "2"] 
    end 

    def show 
    @dice # ["1", "3", "6"] 
    end 

    def line(something) 
    temp = "" 
    something.each do |x| 
     temp << x + " " 
    end 
    puts temp # "1 3 6 " or "1 3 2 6 2 " 
    end 
end 

然後,我希望能夠以連鎖方式在一起,所以我可以做

first = Turn.new 
first.roll.line 
first.show.line 

不過,我真的不知道如何做到這一點,我一直沒能找到如何在線。我看到self得到返回,但我無法弄清楚它的功能。如果我將它移動到另一個方法中,line方法中的代碼有效,所以問題實際上只是處理鏈接和返回。

如果有人不僅可以幫助代碼,但如何鏈接如何處理返回值和如何返回自我作品,這將是很棒的。

謝謝!

回答

2

由於你的#roll#show方法返回一個數組,你需要定義一個方法Array#line才能真正做到first.roll.line

順便說一句,已經有Array#join它也將數組元素連接到一個字符串,就像你的#line方法,所以你可以使用first.roll.join(' ')並擺脫你的#line方法。

+0

你的第二部分是完美的!感謝您解釋第一部分。所以當我從左到右閱讀時,每個方法都會返回一個值,這會在下一個方法中執行? – 2010-08-05 02:30:28

+0

是的,每個方法都會返回最後一個參數。一個很好的方式來看到這是使用irb控制檯。 – 2010-08-05 02:31:57

+0

@Jed您是否指的是返回方法中最後一個參數的事實,因此您不需要顯式地使用'return @ dice'?因爲我已經明白了。我想知道什麼時候你有多個方法鏈接在一起,他們如何傳遞返回的值。 – 2010-08-05 02:34:44