2016-12-19 98 views
0

嘿,我在使用ruby解決以下問題時遇到了問題。定義更新ruby對象屬性的方法

問題

編寫了一個抽象的文件系統提供了更改目錄(CD)功能的功能。

注:

根路徑是 '/'。

路徑分隔符是'/'。

父目錄可尋址爲'..'。

目錄名稱只包含英文字母(A-Z和a-z)。

例如:

路徑= Path.new( '/ A/B/C/d')

提出path.cd( '../ X')的current_path

應該顯示'/ a/b/c/x'。

注意:請勿使用內置的路徑相關功能。

我的回答

class Path 

    def initialize(path) 
    @current_path = path 
    end 

    def current_path 
    @current_path 
    end 

    def cd(new_path) 

    if new_path.include? ".." 
     z = new_path.split("/") 
     b = @current_path 
     a = b.split('/') 
     a.shift 
     a.pop 
     @current_path = a.push(z[z.length-1]).join("/") 
    else 
    end 
    end 
end 

path = Path.new('/a/b/c/d') 
path = path.cd('../x') 

然而,這從 '路徑' 變量返回一個對象的字符串代替。

回答

1

你需要創建一個鏈方法。有兩種方法可以解決這個問題。

不可變的 - 只需創建類的新實例而不是修改,例如return Path.new(calculated_path)

易變的一個 - 修改@current_path和方法#cd

+0

感謝您的回答,非常感謝! –

0

您在對象改變@current_path後,剛剛返回對象(「自我」)

@current_path = a.push(z[z.length-1]).join("/") 
return self 
+0

感謝您的回答,大加讚賞的最後返回self! –