小编kir*_*uku的帖子

如何修复NoSuchMethodError?

我使用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;

testing scala

14
推荐指数
1
解决办法
1万
查看次数

字符串插值和宏:如何获取StringContext和表达式位置

我正在尝试使用宏实现自定义字符串插值方法,我需要一些关于使用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)

macros scala string-interpolation scala-2.10

14
推荐指数
1
解决办法
3161
查看次数

为什么没有部分函数类型的文字?

我想知道为什么不存在部分函数类型的文字.我得写

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中已经有了一些"特殊"功能,为什么没有特殊的语法呢?

scala built-in-types

13
推荐指数
1
解决办法
1094
查看次数

为什么在Scala中使用def和val,反之亦然

我知道之前在其他帖子中已经讨论过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可互换来声明和初始化变量吗?

scala

13
推荐指数
3
解决办法
597
查看次数

在满足谓词的每个元素上拆分列表(Scala)

在文本文件中,我有以下形式的数据:

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)

这可以更简单地实现吗?如果有一个内置方法可以在满足谓词的每个元素上拆分集合(提示,提示,库设计者:)),那将会是非常好的.

collections scala list

12
推荐指数
1
解决办法
2672
查看次数

更新Scala案例类的操作

我有两个相同类型的实例化案例类.

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?我是否以正确的方式思考这个问题?有任何想法吗?

scala scalaz

12
推荐指数
2
解决办法
2135
查看次数

调用toSet是否缺少参数类型错误?

尝试从字符列表中生成映射到其频率的唯一字符列表 - 例如:

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会抱怨这种语法吗?

scala type-inference

12
推荐指数
1
解决办法
4566
查看次数

如何使用Scaladoc生成类型层次结构图?

我希望Scaladoc为以下代码片段生成类型层次结构图:

trait A
trait B extends A
Run Code Online (Sandbox Code Playgroud)

但是当我执行时scaladoc <file>.scala,没有显示任何类型层次结构 - 既不在内部A也不在中B.我怎样才能生成这样的图表?

scala scaladoc

12
推荐指数
1
解决办法
2873
查看次数

为什么辅助构造函数在类中看不到导入?

下面的代码给出了编译错误:

  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)

constructor scala

12
推荐指数
1
解决办法
175
查看次数

xsl:如何选择节点中的前x个字符?

我在XML文档中有以下节点:

<node>This is some text.</node>
Run Code Online (Sandbox Code Playgroud)

我想选择文本的前10个字符.我怎样才能做到这一点?

xml xslt

11
推荐指数
2
解决办法
2万
查看次数