2015-07-21 96 views
1
class Array 
define_method(:trim) do 
new_array = self.pop() 
new_array = self.shift() 
end 
end 

編輯陣列上修剪方法:我試過(除其他事項外)定義是除去第一和最後一個元素

[「喜」,「豪」,「他」]修剪什麼()。

這會返回「hi」。

刪除最後一個元素。刪除第一個元素。但是,如何獲得返回剩餘數組的方法,而不是通過.shift返回的內容(或者恰恰是方法的最後一條指令)?我需要另一個變量嗎?

謝謝。

+0

不需要'define_method',只需使用'def trim' – Stefan

回答

3

pop() and shift()將直接修改數組。你只需要告訴該方法返回的自我

class Array 
    define_method(:trim) do 
     self.pop() 
     self.shift() 
     self 
    end 
end 

編輯:因爲這種方法可能是危險的,我建議你同時定義trim!trim。凡trim!將直接修改陣列和trim返回數組的一個副本,修剪

class Array 
    def trim! 
     self.pop() 
     self.shift() 
     self 
    end 

    def trim 
     self.dup.trim! 
    end 
end 
+0

:: facepalm ::謝謝! –

+1

你可以省略'self.'和'()',即你可以寫'pop'而不是'self.pop()' – Stefan

+0

這是一個很好的答案Cyril。我正在研究同樣的問題,它確實有幫助。你所做的與平均水平不同的是,你明白@Yalla Papi正在處理.pop()和.shift(),你將它們包含在你的答案中,而szymek的答案使用了更先進的技術沒有幫助。我希望更多的回答者如你所做的那樣迴應。 – Padawan

3

訪問數組元素的時候,這樣的

ary = [1, 2, 3, 4]; ary[1..-2] #=> [2, 3] 

所以要回的方法,它可以使用範圍可以是:

class Array 
    def trim 
    self[1..-2] 
    end 
end 

[編輯]:避免返回nil爲空數組:

class Array 
    def trim 
    self[1..-2] || [] 
    end 
end 
+0

我也是這麼做的。 –

+0

這將爲空數組返回'nil',即'[] .trim# - > nil' – Stefan

+0

是的,我可能會在前面加上一個保護子句,比如'self self.empty?' –

相關問題