2017-04-24 100 views
1

我對Ruby很新,所以請在我身上輕鬆一下。我有這個不想執行交叉命令的小功能。如果我進入irb並輸入數組,則設置交點命令,如:third_array = array1 & array2,third_array返回通用元素。但是當我通過irb運行這個代碼片段時,它只是返回[]。有什麼建議麼?紅寶石陣列路口返回空白陣列

class String 

    define_method(:antigrams) do |word2| 

    array1 = [] 
    array2 = [] 
    array1.push(self.split("")) 
    array2.push(word2.split("")) 
    third_array = array1 & array2 
     third_array 
    end 

end 
+0

當'def'完成這項工作時,在這裏不需要使用'define_method'。 'define_method'保留用於您事先不知道方法名稱,計算它或者以某種方式動態生成塊內部的情況。 – tadman

+0

G McMahon,你是否在'def'之前引入了'define_method'(即'def antigrams(word2)')的課程?我問,因爲@tadman提到,在這裏使用'define_method'有點奇怪,但我可以看到教師可能認爲在'def'之前覆蓋'define_method'是有用的。 –

+0

是的卡里,就是這樣。我已經看過'def',但並沒有真正使用過它。也許在我的第二週!? –

回答

4

看你有什麼之後,我覺得你的代碼歸結爲:

class String 
    def antigrams(word) 
    self.chars & word.chars 
    end 
end 

"flurry".antigrams("flagrant") 
# => ["f", "l", "r"] 

如果你在這實際上是相同的chars一個詞叫split(''),雖然少了很多高效。另一個錯誤是將整個數組推入一個數組中,該數組創建了一個[ [ 'f', 'l', ... ] ]形式的嵌套數組。由於兩個結果數組陣列沒有任何共同之處,所以它們的內部數組是不同的,所以&操作返回一個空數組。

你的意思是什麼來連接的一個陣列到另一個,這東西可以+=例如來完成。

無論您何時想知道發生了什麼,可以使用irb來嘗試塊代碼,或者p來在您的方法的不同位置進行調試。

+0

太棒了!謝謝! +1,但它沒有公開記錄......太新:) –