对Scala新手的一个隐含问题似乎是:编译器在哪里寻找隐含?我的意思是隐含的,因为这个问题似乎永远不会完全形成,好像没有它的话.:-)例如,integral下面的值来自哪里?
scala> import scala.math._
import scala.math._
scala> def foo[T](t: T)(implicit integral: Integral[T]) {println(integral)}
foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unit
scala> foo(0)
scala.math.Numeric$IntIsIntegral$@3dbea611
scala> foo(0L)
scala.math.Numeric$LongIsIntegral$@48c610af
Run Code Online (Sandbox Code Playgroud)
对于那些决定学习第一个问题的答案的人来说,另一个问题是,在某些明显模糊的情况下(但无论如何编译),编译器如何选择使用哪个隐式?
例如,scala.Predef定义两个转换String:一个转换为WrappedString另一个转换为StringOps.然而,这两个类都有很多方法,所以为什么Scala不会在调用时抱怨歧义map?
注意:这个问题的灵感来自另一个问题,希望以更一般的方式陈述问题.该示例是从那里复制的,因为它在答案中被引用.
Scala生活中的一个可悲事实是,如果你实例化一个List [Int],你可以验证你的实例是一个List,你可以验证它的任何单个元素是一个Int,但不是它是一个List [ Int],可以很容易地验证:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
Run Code Online (Sandbox Code Playgroud)
-unchecked选项将责任直接归咎于类型擦除:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
case l …Run Code Online (Sandbox Code Playgroud) 我一直在做一些事情,并决定完全搞砸了......在完成了一些事情之后.所以我尝试了以下顺序:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
Run Code Online (Sandbox Code Playgroud)
在那时我得到了消息
Your branch is ahead of 'origin/master' by 2 commits.
Run Code Online (Sandbox Code Playgroud)
我想丢弃我的本地提交,而不必删除我的本地目录并重新下载所有内容.我怎么能做到这一点?
我想提取一些CSV输出格式的查询.不幸的是,我不能使用任何花哨的SQL客户端或任何语言来做到这一点.我必须使用SQLPLUS.
我该怎么做?
我在Web上看到了许多针对Scala的ARM(自动资源管理)示例.虽然大多数看起来很像彼此,但它似乎是一种写作的通道.不过,我确实看到了一个使用延续的非常酷的例子.
无论如何,很多代码都有这种或那种类型的缺陷,所以我认为在Stack Overflow上有一个引用是个好主意,我们可以在这里投票给出最正确和最合适的版本.
如何Class在Scala中获取实例?在Java中,我可以这样做:
Class<String> stringClass = String.class;
Run Code Online (Sandbox Code Playgroud)
什么是Scala中的等价物?
pimp-my-library模式允许我通过提供从该类到实现该方法的类的隐式转换,似乎向类添加方法.
斯卡拉不允许两个这样的隐式转换正在发生,但是,我不能得到A到C使用隐含A于B和另一个隐含的B对C.有没有办法解决这个限制?
随着Scala 2.9.0的发布,Typesafe Stack也被宣布,它结合了Scala语言和Akka框架.现在,虽然Scala在其标准库中有演员,但Akka使用自己的实现.而且,如果我们寻找其他实现,我们也会发现Lift和Scalaz也有实现!
那么,这些实现之间有什么区别?
我一直都喜欢Java API上的文档,但我知道有些人认为它们缺乏.所以我想知道,您认为API文档的一个很好的例子是什么?
请在任何答案中包含链接或实际示例.我希望有一些参考资料,我(以及其他人)当然可以用来改进我们自己的文档.