我正在寻找一种方法来使用由...执行的*.scala文件的完整路径
scala /path/to/file/file.scala
Run Code Online (Sandbox Code Playgroud)
原因是在我的脚本中我想使用路径,这些路径相对于保存file.scala的位置.所以,假设我想在调用file.scala时调用file.scala中的/path/to/file/file_second.scala
scala ./to./file/file.scala
Run Code Online (Sandbox Code Playgroud)
因为我从/ path调用scala的目录(即System.getProperty("user.dir")将返回的内容).我所知道的是,file_second.scala与file.scala位于同一目录中而实际上并不知道完整路径.
我试过了.除其他外,getClass.getResource("").split(":")(1),但这将返回/path/./或/tmp/scala.tmp/
我想必须有一个干净的解决方案,因为scala -savecompiled将在我想要处理的目录中创建一个*.jar,但我无法弄清楚如何......:/
非常感谢任何帮助.
我拼命想要找到一种方法来对字符串列表进行排序,其中字符串是以下形式的预定义标识符:a1.1,a1.2,...,a1.100,a2.1,a2.2,. ...,a2.100,...,b1.1,b1.2,..等等,这是正确的排序.因此,每个标识符首先按其第一个字符(降序字母顺序)排序,并在此排序中按连续数字排序.我已经尝试了sortWith,它提供了一个排序函数,为所有两个连续的列表成员指定上述规则.
scala> List("a1.102", "b2.2", "b2.1", "a1.1").sortWith((a: String, b: String) => a.take(1) < b.take(1) && a.drop(1).toDouble < b.drop(1).toDouble)
res2: List[java.lang.String] = List(a1.102, a1.1, b2.2, b2.1)
Run Code Online (Sandbox Code Playgroud)
这不是我预期的顺序.但是,通过交换表达式的顺序,如
scala> List("a1.102", "b2.2", "b2.1", "a1.1").sortWith((a: String, b: String) => (a.drop(1).toDouble < b.drop(1).toDouble && a.take(1) < b.take(2)))
res3: List[java.lang.String] = List(a1.1, a1.102, b2.1, b2.2)
Run Code Online (Sandbox Code Playgroud)
这确实给了我(至少在这个例子中)所需的顺序,我也不理解.
我会非常感激,如果有人能给我一个暗示那里到底发生了什么以及如何按照我的意愿对列表进行排序(使用比仅比较<或>更复杂的布尔表达式).另一个问题:我正在排序的字符串(在我的示例中)实际上是来自HashMap m的键.任何解决方案都会通过其中的键对其进行排序
m.toSeq.sortWith((a: (String, String), b: (String, String)) => a._1.drop(1).toDouble < b._1.drop(1).toDouble && a._1.take(1) < b._1.take(1))
Run Code Online (Sandbox Code Playgroud)
非常感谢先进!