我一直想知道透明 implicit
转换是否真的是一个好主意,是否真的可以更好地使用implicits更多,嗯,明确.例如,假设我有一个接受a Date
作为参数的方法,并且我有一个隐式转换,它将a String
转换为Date
:
implicit def str2date(s: String) : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
private def foo(d: Date)
Run Code Online (Sandbox Code Playgroud)
那显然我可以通过透明implicit
转换来调用它:
foo("20090910")
Run Code Online (Sandbox Code Playgroud)
将字符串转换为更明确的日期这一事实会更好吗?
class DateString(val s: String) {
def toDate : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
}
implicit def str2datestr(s: String) : DateString = new DateString(s)
Run Code Online (Sandbox Code Playgroud)
那么用法看起来更像是:
foo("20090910".toDate)
Run Code Online (Sandbox Code Playgroud)
这样做的好处是稍后会发生什么事情更清楚 - 我现在已经被implicit
我应该知道的透明转换(Option
对Iterable
任何人?)已经被抓了几次,这种用法仍然允许我们利用implicit
秒.