0

私はjava.io.Fileを持っています、例えば

/foo/bar/baz

この場合、ファイルの「トップ」の親を取得したい

/foo/

明らかに、これは Linux 固有のものです。ソリューションがクロスプラットフォーム互換であることは気にしませんが、そうであれば、よりエレガントです!

Scalaで思いついた最高のものは次のとおりです。

def topParent( file : File ) : File =
{
    var temp = file
    while ( temp.getParent != "/" ) temp = temp.getParentFile
    temp
}

次の動作があります。

scala> topParent( new java.io.File( "/foo/bar/baz" ) )
res14: java.io.File = /foo

しかし、それは少しエレガントではないようです。誰かがより良い解決策を持っていますか?

4

2 に答える 2

0

bmorris591 がコメントで指摘したように、末尾再帰を使用して関数型スタイルで同じことを行う再帰的なソリューションがあります。

@tailrec def topParent(file: File): File = 
    if(file.getParent == "/") file else topParent(file.getParentFile)
于 2013-04-11T14:58:49.080 に答える