2013-09-30 38 views
-4

我知道你不能做的紅寶石嵌套的方法,我想知道我可以這樣做:我可以在ruby中做submethods嗎?

attr_reader :dimensions 

def dimensions.seprate 
    [self.dimensions[0],self.dimensions[1]] 
end 

,然後我可以使用它像

x,y = bar.dimensions.seprate 

只是作爲一種方式在語義上指代彼此相關的輔助方法。

會這樣嗎?

ff不是在那裏做那樣的事嗎?

+0

你試過了嗎? –

+0

還沒有,但我很好奇,如果它工作與否。 – user2733307

+0

你想在這裏做什麼?如果'dimensions'是一個數組,那麼'[dimensions [0],dimensions [1]]'與'dimensions'本身沒有區別。除非它有兩個以上的元素,但是對於這個子方法來說''separate'是一個糟糕的名字。 –

回答

0

由於我在評論中說過,我不明白具體的例子。但一般來說,如果你想要做obj.meth1.meth2,那麼obj.meth1必須返回一個名爲meth2的方法的對象。在Ruby中沒有'context-aware'方法,因此返回值meth1可能只有一個額外的方法,因爲它是由obj的方法返回的。

+0

感謝您的信息,但我已經發表了評論,這是不可能的,我問,紅寶石只是拋出錯誤。 – user2733307

0

將Ruby已經假設是這樣的:

x,y = arr 

意思是一樣的:

x = arr[0] 
y = arr[1] 

所以我不認爲你做任何事情。換句話說:

x,y = bar.dimensions 

如果「尺寸」的類型是不是一個數組更復雜,這可能無法正常工作,但它可能只需要到[]的方法迴應...

0

這是一個完全有效的方法名稱。但它不是有效的Ruby標識符。

define_method(:'dimensions.separate') do 
    [dimensions[0], dimensions[1]] 
end 

x, y = bar.send(:'dimensions.separate') 
+0

有趣的,不是我在找什麼,但有趣的是沒有。 – user2733307

相關問題