小编ABi*_*ika的帖子

Scala中带有选项值或默认参数的方法调用

我是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过去的糟糕时光,其中方法重载会产生相同的问题。

default scala higher-order-functions scala-option

5
推荐指数
1
解决办法
6319
查看次数

具有重命名检测功能的 git show 文件(相当于 git log --follow)

我想在重命名完成之前查看过去重命名的文件的内容(当然需要自动检测)。

通过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

git rename

5
推荐指数
1
解决办法
1439
查看次数