小编Mar*_*lic的帖子

如何用简单的英语解释回调?它们与从另一个函数调用一个函数有什么不同?

如何用简单的英语解释回调?它们与从调用函数中获取某些上下文的另一个函数调用一个函数有什么不同?如何向新手程序员解释他们的权力?

language-agnostic terminology function callback

334
推荐指数
20
解决办法
16万
查看次数

Scala 2.8中<:<,<%<和=:=的含义是什么?它们在哪里记录?

我可以在Predef的API文档中看到它们是泛型函数类型(From)=> To的子类,但就是这样.嗯什么?也许某处有文档,但搜索引擎不能很好地处理"<:<"之类的"名称",所以我无法找到它.

后续问题:我什么时候应该使用这些时髦的符号/类,为什么?

scala type-constraints scala-2.8

197
推荐指数
4
解决办法
3万
查看次数

"文字"这个词是什么意思?

在文字字符串和文字值等上下文中使用时,"文字"这个词的含义是什么?

字面值和值之间有什么区别?

c# language-agnostic glossary terminology

72
推荐指数
6
解决办法
4万
查看次数

为什么在 Scala 中压缩比 zip 快?

我编写了一些 Scala 代码来对集合执行元素操作。在这里,我定义了两个执行相同任务的方法。一种方法使用zip,另一种使用zipped.

def ES (arr :Array[Double], arr1 :Array[Double]) :Array[Double] = arr.zip(arr1).map(x => x._1 + x._2)

def ES1(arr :Array[Double], arr1 :Array[Double]) :Array[Double] = (arr,arr1).zipped.map((x,y) => x + y)
Run Code Online (Sandbox Code Playgroud)

为了在速度方面比较这两种方法,我编写了以下代码:

def fun (arr : Array[Double] , arr1 : Array[Double] , f :(Array[Double],Array[Double]) => Array[Double] , itr : Int) ={
  val t0 = System.nanoTime()
  for (i <- 1 to itr) {
       f(arr,arr1)
       }
  val t1 = System.nanoTime()
  println("Total Time Consumed:" + ((t1 - t0).toDouble / 1000000000).toDouble + "Seconds") …
Run Code Online (Sandbox Code Playgroud)

performance scala scala-collections jmh elementwise-operations

39
推荐指数
4
解决办法
4876
查看次数

必须完全知道匿名函数的参数类型.(SLS 8.5)

我有一个函数文字

{case QualifiedType(preds, ty) =>
               t.ty = ty ;
               Some((emptyEqualityConstraintSet,preds)) }
Run Code Online (Sandbox Code Playgroud)

这会导致错误消息

missing parameter type for expanded function The argument types of an anonymous function
must be fully known. (SLS 8.5) Expected type was:
? => Option[(Typer.this.EqualityConstraintSet, Typer.this.TypeRelationSet)]
Run Code Online (Sandbox Code Playgroud)

我查看了SLS 8.5,但未找到解释.

如果我自己扩展功能

{(qt : QualifiedType) =>
  qt match {case QualifiedType(preds, ty) =>
               t.ty = ty ;
               Some((emptyEqualityConstraintSet,preds)) }}
Run Code Online (Sandbox Code Playgroud)

错误消失了.

(a)为什么这是一个错误?

(b)我该怎么做才能解决这个问题?

我尝试了明显的修复,即: QualifiedType在模式和=>之间添加,但这是一个语法错误.


我注意到的一件事是上下文有所不同.如果我使用函数literal作为声明为期望a的函数的参数QualifiedType => B,则没有错误.但是如果我将它用作期望a的函数的参数A => B,则会出现错误.我希望这里发生的事情是,由于模式可以想象应用于类型为QualifiedType的超类型的对象,编译器不愿意在不保证函数不会应用于的情况下分配明显的类型.任何不是QualifiedType的东西.我真正想要的是能够写出{QualifiedType( preds, ty) => ...} …

lambda scala function-literal pattern-matching

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

理解`andThen`

我遇到过andThen,但没有正确理解它.

为了进一步研究,我阅读了Function1.andThen 文档.

def andThen[A](g: (R) ? A): (T1) ? A
Run Code Online (Sandbox Code Playgroud)

mm是一个MultiMap实例.

scala> mm
res29: scala.collection.mutable.HashMap[Int,scala.collection.mutable.Set[String]] with scala.collection.mutable.MultiMap[Int,String] = 
                    Map(2 -> Set(b) , 1 -> Set(c, a))

scala> mm.keys.toList.sortWith(_ < _).map(mm.andThen(_.toList))
res26: List[List[String]] = List(List(c, a), List(b))

scala> mm.keys.toList.sortWith(_ < _).map(x => mm.apply(x).toList)
res27: List[List[String]] = List(List(c, a), List(b))
Run Code Online (Sandbox Code Playgroud)

注 - 来自行动中的DSL的代码

andThen强大的?基于这个例子,看起来像mm.andThen去糖x => mm.apply(x).如果有更深刻的含义andThen,那么我还没有理解它.

scala function-composition

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

在Scala中解析JSON最直接的方法是什么?

我正在使用Scala开发一个简单的Web应用程序.计划是从外部API获取JSON数据,并将其插入到模板中(遗憾的是,以XML格式获取数据不是一种选择).

我曾尝试使用Twitter的scala-json库,但我无法正确编译(github上的代码无法在sbt中更新,说标准项目7.10不可用,我还没有解决这个问题).

lift-json看起来令人印象深刻,但似乎比我现在需要的要复杂得多.

试图导入我使用Java,jsonic的库,导致各种神秘的错误.这太糟糕了,因为我更喜欢简洁的jsonic.

我在内置的scala.util.parsing.json.JSON方面取得了一些进展,但实际上我无法告诉如何访问这些元素.你可能已经注意到了,我对Scala有些新意.如何访问JSONObjects的属性?

scala.util.parsing.json.JSON有很多信息,但有没有关于如何在任何地方使用它的直接教程?

我真的只对目前反序列化JSON,Ints,Strings,Maps和Lists感兴趣.我不需要序列化对象或使反序列化的对象适合当前的类.

任何人都可以指出我使用上述库之一的方法,或者帮助我设置一个可以满足我想要的Java库吗?

serialization parsing json scala scala-2.8

18
推荐指数
1
解决办法
7839
查看次数

scala中ArrayBuffer和Array之间的区别是什么

我是scala/java的新手,我在解决这两个问题上遇到了麻烦.

通过阅读scala文档,我了解到ArrayBuffer是交互式的(追加,插入,前置等).

1)基本的实施差异是什么?

2)这两者之间是否存在性能差异?

谢谢.

arrays scala

18
推荐指数
1
解决办法
7841
查看次数

为什么在IntelliJ中运行Scala 2.13测试而不是在Scala 2.12中运行时出现此错误?

当我尝试在带有Scala 2.13的IntelliJ(2019.1),Scala IntelliJ插件v2019.1.8中运行测试时遇到以下错误:

Exception in thread "ScalaTest-dispatcher" java.lang.NoSuchMethodError: scala.collection.JavaConverters.seqAsJavaListConverter(Lscala/collection/Seq;)Lscala/collection/convert/Decorators$AsJava;
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.treeBuilder.ParallelTreeBuilder.getOrdinalList(ParallelTreeBuilder.java:21)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.treeBuilder.ParallelTreeBuilder$SuiteTree.<init>(ParallelTreeBuilder.java:92)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.treeBuilder.ParallelTreeBuilder.initRun(ParallelTreeBuilder.java:261)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestReporterWithLocation.apply(ScalaTestReporterWithLocation.java:59)
    at org.scalatest.DispatchReporter$Propagator.$anonfun$run$10(DispatchReporter.scala:249)
    at org.scalatest.DispatchReporter$Propagator.$anonfun$run$10$adapted(DispatchReporter.scala:248)
    at scala.collection.immutable.List.foreach(List.scala:312)
    at org.scalatest.DispatchReporter$Propagator.run(DispatchReporter.scala:248)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

以下是我的Gradle依赖项:

dependencies {
    implementation 'org.scala-lang:scala-library:2.13.0'

    testImplementation 'org.scalatic:scalatic_2.13:3.0.8'
    testImplementation 'org.scalatest:scalatest_2.13:3.0.8'
}
Run Code Online (Sandbox Code Playgroud)

当我将依存关系更改为Scala 2.12.x时,测试将在IntelliJ中正确执行而没有错误。这里发生了什么?

scala intellij-idea scalatest scala-2.13

15
推荐指数
1
解决办法
2065
查看次数

How to make method return the same generic as the input?

I want to split a string delimited by commas and use the result as either a Seq or a Set:

def splitByComma(commaDelimited: String): Array[String]
  = commaDelimited.trim.split(',')

def splitByCommaAsSet(commaDelimited: String): Set[String]
  = splitByComma(commaDelimited).toSet

def splitByCommaAsSeq(commaDelimited: String): Seq[String]
  = splitByComma(commaDelimited).toSeq

val foods = "sushi,taco,burrito"
val foodSet = splitByCommaAsSet(foods)
// foodSet: scala.collection.immutable.Set[String] = Set(sushi, taco, burrito)
val foodSeq = splitByCommaAsSeq(foods)
// foodSeq: Seq[String] = List(sushi, taco, burrito)
Run Code Online (Sandbox Code Playgroud)

However, this is quite repetitive. Ideally, I would want to have something like genericSplitByComma[Set](foods) that …

generics polymorphism scala type-conversion scala-collections

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