2016-12-19 44 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! –