我是Scala的新手,偶然发现了一个小问题,这个问题一直困扰着我。假设有一些带有默认参数的方法
def foo(v: Any = "default"): String = s"called with parameter '$v'"
Run Code Online (Sandbox Code Playgroud)
和一个Option val opt: Option[String]。如何使用选项值(如果已定义)或默认参数调用此方法?我的意思是尽管有明显的解决方案
val result = if (opt.isDefined)
from.here.to.foo(opt.get)
else
from.here.to.foo()
Run Code Online (Sandbox Code Playgroud)
并且不得不用对象链(可能很长)键入两次该方法?更不用说具有多个可选/默认参数了...
我所能想到的就是无助的帮手
def definedOrDefault[A, B](opt: Option[A], f0: => B, f1: A => B): B =
if (opt.isDefined) f1(opt.get) else f0
Run Code Online (Sandbox Code Playgroud)
但是当无法在高阶函数中提及默认参数时,就是这样。让我想起了Java过去的糟糕时光,其中方法重载会产生相同的问题。
我想在重命名完成之前查看过去重命名的文件的内容(当然需要自动检测)。
通过git log --follow foo_renamed.txt并且git show master~20 foo_original_name.txt我可以确认 git 能够跟踪文件重命名并且该文件存在于master~20. 然而,
git show --follow master~20:foo_renamed.txt
Run Code Online (Sandbox Code Playgroud)
和
git show -M master~20:foo_renamed.txt
Run Code Online (Sandbox Code Playgroud)
都失败了
致命:路径“foo_renamed.txt”存在于磁盘上,但不在“master~20”中。
这实际上是有道理的,因为对象规范是一个<rev>:<path>blob,但没有. 还有其他办法吗?谢谢。-- /file/pathgit show