我使用Scala 2.10.0RC1和sbt 0.12.1.是什么原因以及如何修复此运行时错误(在2.9.2上正常运行)?
确切的错误消息是:
java.lang.NoSuchMethodError:scala.Predef $ ArrowAssoc $ .extension $$减$ more(Ljava/lang/Object; Ljava/lang/Object;)Lscala/Tuple2;
我正在尝试使用宏实现自定义字符串插值方法,我需要一些关于使用API的指导.
这是我想要做的:
/** expected
* LocatedPieces(List(("\nHello ", Place("world"), Position()),
("\nHow are you, ", Name("Eric"), Position(...)))
*/
val locatedPieces: LocatedPieces =
s2"""
Hello $place
How are you, $name
"""
val place: Piece = Place("world")
val name: Piece = Name("Eric")
trait Piece
case class Place(p: String) extends Piece
case class Name(n: String) extends Piece
/** sequence of each interpolated Piece object with:
* the preceding text and its location
*/
case class LocatedPieces(located: Seq[(String, Piece, Position)])
implicit class s2pieces(sc: StringContext) {
def …
Run Code Online (Sandbox Code Playgroud) 我想知道为什么不存在部分函数类型的文字.我得写
val pf: PartialFunction[Int, String] = {
case 5 => "five"
}
Run Code Online (Sandbox Code Playgroud)
字面意思:=>
较短的地方:
val pf: Int :=> String = {
case 5 => "five"
}
Run Code Online (Sandbox Code Playgroud)
部分函数经常被使用并且在Scala中已经有了一些"特殊"功能,为什么没有特殊的语法呢?
我知道之前在其他帖子中已经讨论过SO,我理解使用def
和之间的基本区别val
.def
用于定义方法和val
不可变引用.我想通过提出这个问题来实现的目的是了解是否还有更多内容def
.可以和它互换使用val
吗?
最近我尝试了以下代码,无法说服自己,如果我目前的理解def
是充分的:
scala> def i: Int = 3
i: Int
scala> i
res2: Int = 3
Run Code Online (Sandbox Code Playgroud)
所以我很好奇,这相当于val i = 3
?
然后我尝试了这个:
scala> i()
<console>:9: error: Int does not take parameters
i()
Run Code Online (Sandbox Code Playgroud)
我这样做只是为了测试我对语义的理解def
.现在我想知道,何时i
是一种方法,为什么Scala抱怨"......不带参数"?
接下来我尝试了以下内容:
scala> def i(): Int = 3
i: ()Int
scala> i()
res4: Int = 3
Run Code Online (Sandbox Code Playgroud)
这次斯卡拉似乎同意这i
是一种方法.那么我可以用来def
代替val
可互换来声明和初始化变量吗?
在文本文件中,我有以下形式的数据:
1)
text
text
2)
more text
3)
even more text
more even text
even more text
...
Run Code Online (Sandbox Code Playgroud)
我使用以下内容将其作为字符串列表阅读:
val input = io.Source.fromFile("filename.txt").getLines().toList
Run Code Online (Sandbox Code Playgroud)
我想打破列表分解成子列表开始1)
,2)
等等.
我想出来:
val subLists =
input.foldRight( List(List[String]()) ) {
(x, acc) =>
if (x.matches("""[0-9]+\)""")) List() :: (x :: acc.head) :: acc.tail
else (x :: acc.head) :: acc.tail
}.tail
Run Code Online (Sandbox Code Playgroud)
这可以更简单地实现吗?如果有一个内置方法可以在满足谓词的每个元素上拆分集合(提示,提示,库设计者:)),那将会是非常好的.
我有两个相同类型的实例化案例类.
case class Foo(x : Option[String], y : Option[String], z : Option[String])
Run Code Online (Sandbox Code Playgroud)
让我们调用实例化的类A和B.
val a = Foo(x=Some("foo"), y=Some("bar"), z=Some("baz"))
val b = Foo(x=None, y=Some("etch"), z=None)
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以通过一般操作在单个操作中用B更新案例类A.
val c = b *oper* a // produces Foo(x=Some("foo"), y=Some("etch"), z=Some("baz"))
Run Code Online (Sandbox Code Playgroud)
参数设置为无忽略.理想情况下,操作也应该是通用的,因此它可以作用于任何类型的案例类.
我有一些直觉,可以通过先将类转换为元组/列表并在操作完成后转换回类来使用Scalaz来实现这一点 - 也许使用ApplicativeBuilder?我是否以正确的方式思考这个问题?有任何想法吗?
尝试从字符列表中生成映射到其频率的唯一字符列表 - 例如:
List('a','b','a') -> List(('a',2), ('b',1))
Run Code Online (Sandbox Code Playgroud)
所以,只是在控制台中乱窜,这有效:
val l = List('a', 'b', 'c', 'b', 'c', 'a')
val s = l.toSet
s.map(i => (i, l.filter(x => x == i).size))
Run Code Online (Sandbox Code Playgroud)
但是,仅通过组合最后2行缩短不?
l.toSet.map(i => (i, l.filter(x => x == i).size))
Run Code Online (Sandbox Code Playgroud)
给出错误"缺少参数类型".
有人可以解释为什么Scala会抱怨这种语法吗?
我希望Scaladoc为以下代码片段生成类型层次结构图:
trait A
trait B extends A
Run Code Online (Sandbox Code Playgroud)
但是当我执行时scaladoc <file>.scala
,没有显示任何类型层次结构 - 既不在内部A
也不在中B
.我怎样才能生成这样的图表?
下面的代码给出了编译错误:
class Info(val x: String)
object Info {
val default = new Info("top")
}
case class Data(x: String) {
import Info.default
def this() = this(default.x)
}
Run Code Online (Sandbox Code Playgroud)
错误:(11,23)未找到:值默认def this()= this(default.x)
为什么default
在构造函数中看不到符号,尽管有导入?
进一步的实验表明它不仅是重要的.用def
(或偶数val
)替换导入行无济于事,但错误仍然存在:
def default = Info.default
Run Code Online (Sandbox Code Playgroud) 我在XML文档中有以下节点:
<node>This is some text.</node>
Run Code Online (Sandbox Code Playgroud)
我想选择文本的前10个字符.我怎样才能做到这一点?
scala ×9
collections ×1
constructor ×1
list ×1
macros ×1
scala-2.10 ×1
scaladoc ×1
scalaz ×1
testing ×1
xml ×1
xslt ×1