如何用简单的英语解释回调?它们与从调用函数中获取某些上下文的另一个函数调用一个函数有什么不同?如何向新手程序员解释他们的权力?
我可以在Predef的API文档中看到它们是泛型函数类型(From)=> To的子类,但就是这样.嗯什么?也许某处有文档,但搜索引擎不能很好地处理"<:<"之类的"名称",所以我无法找到它.
后续问题:我什么时候应该使用这些时髦的符号/类,为什么?
在文字字符串和文字值等上下文中使用时,"文字"这个词的含义是什么?
字面值和值之间有什么区别?
我编写了一些 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
我有一个函数文字
{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) => ...} …
我遇到过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开发一个简单的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库吗?
我是scala/java的新手,我在解决这两个问题上遇到了麻烦.
通过阅读scala文档,我了解到ArrayBuffer是交互式的(追加,插入,前置等).
1)基本的实施差异是什么?
2)这两者之间是否存在性能差异?
谢谢.
当我尝试在带有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中正确执行而没有错误。这里发生了什么?
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
scala ×8
scala-2.8 ×2
terminology ×2
arrays ×1
c# ×1
callback ×1
function ×1
generics ×1
glossary ×1
jmh ×1
json ×1
lambda ×1
parsing ×1
performance ×1
polymorphism ×1
scala-2.13 ×1
scalatest ×1