2014-01-15 133 views
0

返回值我有以下方法(S)下面的類:實例變量在Ruby中

class Ad 
    def generate 
    # Find logo 
    @logo = create_logo(arg1,arg2...) 
    end 

    def create_logo(arg1,arg2,..) 
    #Logic that sets @logo 
    return @logo 
    end 
end 

所以,你可以看到我使用的是@instance_variable作爲返回值和接收的方法值。我相信通過這樣做,方法更具可測性,並且它使代碼變得清晰,但是您認爲這在Ruby中是正確的嗎?

或者這將是更正確的:

class Ad 
    def generate 
    # Find logo 
    create_logo(arg1,arg2...) 
    end 

    def create_logo(arg1,arg2,..) 
    #Logic that sets @logo 
    end 
end 

感謝

+0

你在哪裏使用實例變量作爲參數? – Linuxios

+0

好的。我的問題會更像是......一種方法返回實例變量是否正常?或者應該在方法內部修改? –

+0

@Linuxios修改了這個問題。 –

回答

1

你的第一種方法是更類似於函數式編程方法,只是我猜想,它會沒有任何的好處函數編程,因爲它是做文件IO,副作用小等優點

問問你自己:

這個方法的返回值是完全是它的參數的結果,它沒有副作用? (例如設置增值經銷商,文件IO,數據庫等)

如果答案是肯定的,比create_logo應該這樣來實現:

def create_logo(arg1,arg2,..) 
    logo = some_logic() 
end 

並調用了一套@logo。如果沒有,這整個假裝幾乎功能編程的東西是沒用的。

這種類型的實現的好處是,你可以單元測試它,它是一個有限的,小的自包含的程序的一部分,它很簡單。如果上述問題的答案是否定的,那麼對你來說什麼都不會做。

+0

有時我有解釋自己的問題。我很抱歉。我的問題更相關爲...應該在方法中設置實例變量,還是應該將其設置爲諸如「@logo = create_logo」的方法的返回值 - 而不是create_logo設置「@ logo'' –

+0

因此,如果實例變量不是返回,但只是在方法中設置,我想很難測試這個方法對它做了什麼,對吧? –

+0

@HommerSmith:同樣,這取決於create_logo爲創建徽標所做的工作。如果它是一個完全依賴於它的參數的方法,請使用第一個。如果它更像是一個有副作用的內部實用程序方法,請將其設置在create_logo中。別擔心,我今天也不太清楚。 – Linuxios

1

在第一個例子中,你基本上說的是@logo = @logo,這看起來很奇怪。我在一個地方被分配一個值@logo,無論是在generate方法(和只使用一個局部變量create_logo如果需要,或create_logo設置@logo按你的第二個例子。