2016-12-19 4 views
0

こんにちは私はrubyを使って解決する次の質問に問題があります。ruby​​オブジェクトのプロパティを更新するメソッドを定義する

質問

抽象ファイルシステムのディレクトリ変更(CD)機能を提供して機能を記述します。

注:

ルートパスは '/' です。

パス区切り記号は '/'です。

親ディレクトリは '..'としてアドレス指定可能です。

ディレクトリ名は、英字(A〜Zおよびa〜z)のみで構成されています。例えば

パス= Path.new( '/ A/B/C/D')

は( '../ X')path.cdを置く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') 

私の答えは、しかし、これは 'パス' 変数からオブジェクトの代わりに文字列を返します。あなたがオブジェクトに@current_pathを変更した後

答えて

1

オブジェクトを返します。それに対処するには2つの方法があります。

変更不可能なクラス - クラスを変更する代わりに、クラスの新しいインスタンスを作成するだけです。 return Path.new(calculated_path)

可変1 - @current_pathを変更して、答えを#cd

+0

答えをありがとう、非常に感謝! –

0

は、ちょうどあなたが連鎖メソッドを作成する必要があります(「自己」)

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

おかげで、はるかに高く評価方法の終わりにselfを返します! –

関連する問題