我試圖產生給定數組的完整排列。例如,如果輸入是fact(2, ['A', 'B'])
,則輸出應爲[["A", "A"], ["B", "A"], ["A", "B"], ["B", "B"]]
。紅寶石注入奇怪行爲
def fact(n, arr)
return [[]] if n == 0
nxt = fact(n - 1, arr).freeze
arr.inject([]){ |result, elem| nxt.each { |x| result.push(x + [elem]); result } }
end
但是,當我試圖使用'更多功能編程'的方式做到這一點,發生了一些奇怪的事情。口譯員抱怨Untitled 4.rb:4:in 'push': can't modify frozen Array (RuntimeError)
。我其實試圖修改注入數組result
,它怎麼可能改變nxt
?
您可能希望使用',因爲它避免了對鏈'了'向前each_with_object'作爲替代'inject'這裏。 – tadman 2015-03-02 23:40:26