2014-08-29 18 views
0

我很困惑,爲什麼以下將無法工作。Delete_if通過字符串和數字的數組,重構

def array_mod(source_array, letter_to_delete) 
    source_array.delete_if {|x| 
    String===x && x.include?letter_to_delete } 
end 

基本上我具有接受一個數組,其中,用於測試目的將有兩個字符串和數字的功能。第二個參數是一個字母。該函數應該迭代數組,跳過Fixnum值,以及delete_if元素,這些元素是a)字符串和b)包含違規字母。我已經創建了這個功能,但我試圖重構它,使其更專業。謝謝你幫助我變得更好!

def array_mod(source_array, letter_to_delete) 
    return source_array.delete_if do |x| 
     if x.is_a?(Fixnum) ==true 
     next 
     else 
     x.include?letter_to_delete 
     end 
    end 
end 
+0

我不懂行'如果x.is_a(Fixnum對象)==真'?。如果我是你,我會這樣做,而不是:'if(x.is_a?(Fixnum)== true)== true'。只是要確定。呵呵.. JK。你可以把它留到'如果x.is_a?(Fixnum)'。 – Adrian 2014-08-30 03:32:58

回答

0

你缺少括號:

def array_mod(source_array, letter_to_delete) 
    source_array.delete_if {|x| x.is_a?(String) && x.include?(letter_to_delete) } 
end 
+0

是否有一個String === x不可接受的原因?我的理解是,這隻意味着'x'的類型是'string',它與x.is_a相同(String)no? – HectorOfTroy407 2014-08-30 00:04:40

+1

@ HectorOfTroy407 - 你說得對,我更喜歡用'is_a?',因爲它更明顯,並且爲case語句留下'==='。 – BroiSatse 2014-08-30 00:08:22

+1

作爲健忘的人,我可能會寫'str === String',並且可能有難以發現的bug。我不太可能寫'String.is_a? str'。 (我有時把'=〜'寫成'〜=','|| ='寫成'= ||')。 – 2014-08-30 07:15:56