javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

减少-Scala:fold vs foldL

我试图了解fold和foldLeft以及各自的reduce和reduceLeft是如何工作的。 我以fold和foldLeft为例

scala> val r = List((ArrayBuffer(1, 2, 3, 4),10))
scala> r.foldLeft(ArrayBuffer(1,2,4,5))((x,y) => x -- y._1)

scala> res28: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5)

scala> r.fold(ArrayBuffer(1,2,4,5))((x,y) => x -- y._1)
<console>:11: error: value _1 is not a member of Serializable with Equals
              r.fold(ArrayBuffer(1,2,4,5))((x,y) => x -- y._1)

为什么fold无法用作foldLeft? 什么是Serializable with Equals? 我了解fold和foldLeft在参数泛型类型方面具有稍微不同的API签名。 请指教。 谢谢。

trans by 2020-08-12T04:24:46Z

如何在Scala中的默认构造函数中检查构造函数参数并引发异常或声明?

我想检查构造函数参数,并拒绝构造抛出IllegalArgumentException的情况,以防参数设置无效(值不符合预期约束)。 如何在Scala中编写代码?

trans by 2020-08-11T19:59:05Z

scala-从哪里开始依赖类型编程?

这里有一个Idris教程,一个Agda教程以及许多其他教程风格的论文和介绍性材料,这些参考文献永无休止地涉及要学习的东西。 在所有这些中,我有点爬行,在大多数时候,我都坚持使用数学记号,而新术语突然出现而没有任何解释。 也许我的数学很烂:-)

是否有任何规范的方法来进行依赖类型编程? 就像您想学习Haskell一样,您从“自学Haskell”开始,当您想要学习Scala时,您也从Odersky的书开始,对于Ruby,您阅读了其中包含突变错误的怪异教程。 但是我不能以他们的书开始阿格达或伊德里斯的书。 他们远在我头上。 我尝试了Coq,并陷入了证明蠕虫的风格。 阿格达(Agda)需要大量的数学背景,而伊德里斯(Idris)好吧,现在就让我们离开吧!

我非常了解静态类型系统,我精通Scala,并且在必要时可以使用Haskell。 我了解功能范式并每天使用它,我了解代数数据类型和GADT(实际上相当顺利),最近我设法理解了Lambda多维数据集。 不过,我缺少数学和逻辑部分。

trans by 2020-08-10T22:11:14Z

scala-设置sbt以使用Java 7进行编译?

运行build.sbt任务时遇到编译错误,因为这些源引用了仅出现在Java 7中的java.nio.file程序包中的新类。

我在build.sbt中具有以下内容:

javaHome := Some(file("/opt/jdk/jdk1.7.0"))

fork := true

在sbt中:

> show java-home
[info] Some(/opt/jdk/jdk1.7.0)

它可以在Eclipse中编译并正常运行。 如何设置sbt以使用Java 7进行编译?

trans by 2020-08-10T14:20:56Z

将SQL ResultSet视为Scala流

当我查询数据库并收到(仅转发,只读)ResultSet时,ResultSet的作用类似于数据库行的列表。

我正在尝试找到一种将此ResultSet像Scala Stream一样对待的方法。这将允许诸如filtermap之类的操作,而不会消耗大量的RAM。

我实现了尾递归方法来提取单个项目,但这要求所有项目都同时在内存中,如果ResultSet非常大,则会出现问题:

// Iterate through the result set and gather all of the String values into a list
// then return that list
@tailrec
def loop(resultSet: ResultSet,
         accumulator: List[String] = List()): List[String] = {
  if (!resultSet.next) accumulator.reverse
  else {
    val value = resultSet.getString(1)
    loop(resultSet, value +: accumulator)
  }
}
trans by 2020-08-10T09:42:54Z

scala-从参数列表实例化案例类

鉴于:

case class Foo(a: Int, b: String, c: Double)

你可以说:

val params = Foo(1, "bar", 3.14).productIterator.toList

并获得:

params: List[Any] = List(1, bar, 3.14)

有没有一种方法可以直接从此列表“后退”并重新创建Foo对象,即:

Foo.createFromList(params)   // hypothetical

而不是写:

Foo(params(0).asInstanceOf[Int], params(1).asInstanceOf[String], params(2).asInstanceOf[Double])

编辑:似乎归结为能够将列表的元素作为参数发送给函数而无需显式写出它们,例如:

def bar(a: Int, b: Int, c: Int) = //...
val list = List(1, 2, 3, 4, 5)
bar(list.take(3)) // hypothetical, instead of:
bar(list(0), list(1), list(2))

我有点希望能够做到:

bar(list.take(3): _*)

但这似乎不起作用。

编辑:基于临时答案的解决方案,但直接调用构造函数而不是使用apply方法:

case class Foo(a: Int = 0, b: String = "bar", c: Double = 3.14) {
    val cs = this.getClass.getConstructors
    def createFromList(params: List[Any]) =
    cs(0).newInstance(params map { _.asInstanceOf[AnyRef] } : _*).asInstanceOf[Foo]
}

现在您可以执行以下操作:

scala> Foo().createFromList(List(4, "foo", 9.81))
res13: Foo = Foo(4,foo,9.81)

您还可以将创建方法重构为特征:

trait Creatable[T <: Creatable[T]] {
    val cs = this.getClass.getConstructors
    def createFromList(params: List[Any]) =
        cs(0).newInstance(params map { _.asInstanceOf[AnyRef] } : _*).asInstanceOf[T]   
}

case class Bar(a: Int = 0, b: String = "bar", c: Double = 3.14) extends Creatable[Bar]

并例如:

scala> val bar = Bar()
bar: Bar = Bar(0,bar,3.14)

scala> bar == bar.createFromList(bar.productIterator.toList)
res11: Boolean = true
trans by 2020-08-10T09:02:37Z

将Scala中的列表转换为格式化的字符串

如何使用List方法将Scala中的List(1,2,3)转换为格式类似于"1/2/3"的字符串?

trans by 2020-08-10T03:02:28Z

用于元组功能的Scala返回类型

我想做一个scala函数,它返回一个scala元组。

我可以做一个这样的功能:

def foo = (1,"hello","world")

它将正常工作,但是现在我想告诉编译器我希望从函数返回什么,而不是使用内置的类型推断(毕竟,我不知道(1,"hello","world")是什么)。

trans by 2020-08-09T21:14:01Z

oop-在纯函数式编程环境中的面向对象编程?

在功能编程(FP)上下文中使用面向对象编程(OOP)有什么优势?

我已经使用F#一段时间了,我注意到我的函数越是无状态的,就越不需要将它们作为对象的方法。 特别是,依靠类型推断使它们可在尽可能多的情况下使用具有优势。

这并不排除需要某种形式的名称空间,该名称空间与成为OOP正交。 也不鼓励使用数据结构。 实际上,FP语言的实际使用在很大程度上取决于数据结构。 如果查看在F Sharp编程/高级数据结构中实现的F#堆栈,您会发现它不是面向对象的。

在我看来,OOP与使方法作用于对象状态主要是为了使对象发生突变而紧密相关。 在不需要或不需要的纯FP上下文中。

一个实际的原因可能是能够与OOP代码进行交互,这与F#与.NET的工作方式几乎相同。 除此之外,还有什么原因吗? 在Haskell的世界中(编程更纯正的FP)有什么经验?

我会很高兴提及任何有关此问题的论文或反事实的例子。

trans by 2020-08-09T09:00:24Z

自动化Java到Scala的源代码转换?

(是的,我知道我可以从Scala调用Java代码;但这是没有意义的;我想删除Java代码,而不是一直保留它,而不得不一直研究下去并加以维护!)

有没有实用程序可以将Java源代码转换为Scala源代码?

我认为,从理论上讲,应该可以实现最小的损失。

我发现了这一点,但它似乎不活跃,可能有错误/不完整...[http://sourceforge.net/projects/java2scala/]

还有其他选择吗?

trans by 2020-08-09T04:04:06Z

java-Spark支持gzip格式吗?

对于大数据项目,我计划使用spark,它具有一些不错的功能,例如用于重复工作负载的内存计算。 它可以在本地文件或HDFS之上运行。

但是,在官方文档中,我找不到有关如何处理压缩文件的任何提示。 实际上,处理.gz文件而不是解压缩文件可能非常有效。

有没有一种方法可以手动实现读取gzip文件,或者在读取.gz文件时已经自动完成了解压缩?

trans by 2020-08-08T19:15:46Z

IntelliJ IDEA中`scala-2.11`文件夹的用途是什么

最近更新了IDEA和Scala插件后,出现了scala-2.11文件夹。
它应该用来做什么?

trans by 2020-08-08T16:06:53Z

.net-scala.net生产准备就绪了吗?

Scala似乎也有.NET实现。 我想知道这是否是一个完整的实施方案,没有松懈的结局,还是仅仅是展示。

这很重要,因为我们将要开发的应用除了主要的网络实现外,还应具有Windows GUI。 拥有可以在两个实现之间移植核心代码的语言,看起来像是交易者。

有人在Scala的.NET实现中工作吗? 任何反馈?

trans by 2020-08-08T13:43:32Z

scala-什么是发散的隐式扩展错误?

在尝试找到另一个问题的解决方案时[1],我遇到了一个发散的隐式扩展错误。 我正在寻找有关这意味着什么的解释

这是用例:

scala> implicit def ordering[T](implicit conv: T => Ordered[T], res: Ordering[Ordered[T]]) = Ordering.by(conv)
ordering: [T](implicit conv: (T) => Ordered[T],implicit res: Ordering[Ordered[T]])scala.math.Ordering[T]

scala> def foo[T <% Ordered[T]](s : Seq[T]) = s.sorted
<console>:6: error: diverging implicit expansion for type Ordering[T]
starting with method ordering in object $iw
       def foo[T <% Ordered[T]](s : Seq[T]) = s.sorted
                                                ^
trans by 2020-08-07T07:04:05Z

macos-获取Scala插入

我是Scala的新手。 我已经下载了它,并且可以在Eclipse上对其进行开发; 但我无法使其在Terminal中工作。

所有网站和书籍都说只能输入scala-这是行不通的。

该网站真气地说:

我们假设Scala软件和用户环境都是 正确设置。

我该怎么做?

我对此很陌生,使用Jargon或假设对Scala的框架了解过多,将会破坏良好的响应。 请保持简单。

  • Mac OS X(10.6.7)
  • 规模:2.9.0.1

谢谢

trans by 2020-08-07T05:55:10Z

shapeless-使用“ Scala中的Prolog”查找可用的类型类实例

考虑到[https://speakerdeck.com/folone/theres-a-prolog-in-your-scala],我想“滥用” Scala类型系统以查找例如 符合指定条件的CanBuildFrom。 Prolog风格,我将在以下伪代码行中进行评估:

can_build_from(Src, int, list[int])
Src = somecollectiontype1[int]
Src = somecollectiontype2[int]
... etc

即运行时将查找满足语句List(canFooIntString, canFooDblString, canFooBoolString)CanFoo[X, String]的所有值。

现在,我知道,Scala隐式查找系统所使用的原始约束/逻辑编程环境并不是要用于此类技巧,并且不能“返回” CanFoo[X, String]的多个发现值。 盒子,所以我的问题是:是否有一个“魔术”使其起作用,以便我能以某种方式获得List(canFooIntString, canFooDblString, canFooBoolString)中所有的可能值CanFoo

附加示例:

trait CanFoo[T, U]

implicit val canFooIntString  = new CanFoo[Int,     String] {}
implicit val canFooDblString  = new CanFoo[Double,  String] {}
implicit val canFooBoolString = new CanFoo[Boolean, String] {}
implicit val canFooIntSym     = new CanFoo[Int,     Symbol] {}
implicit val canFooDblSym     = new CanFoo[Double,  Symbol] {}
implicit val canFooBoolSym    = new CanFoo[Boolean, Symbol] {}

现在我想查询CanFoo[X, String]并取回List(canFooIntString, canFooDblString, canFooBoolString),或3000339571419907907074并取回X ∈ [String, Symbol]

或者,CanFoo[X, String]将返回List(canFooIntString, canFooDblString, canFooBoolString),即匹配的CanFoo的所有实例。

trans by 2020-08-07T03:45:02Z

解析-Scala Packrat解析器忽略失败拍子

我有一个使用Scala RegexParsers编写的解析器-链接

在解析具有深层嵌套表达式的语法时,它存在一些严重的性能问题。 因此,我创建了一个版本,可以在Scala的failure: Base Failure中混合使用-链接

Packrat版本不会出现相同的性能问题,并且可以正确解析语法。 但是,当我提供无效的语法进行测试时,例如 这个

旧的(非packrat)解析器用于通过故障解析器组合器failure: Base Failure在此处正确地报告“无效规则”故障-链接

当使用packrat-parser版本时,如果启用跟踪,则可以从跟踪中看到创建失败的原因与在非packrat版本中一样,但是PackratParser似乎忽略了该错误,而是始终返回failure: Base Failure

我需要了解使用PackratParsers时的故障处理是否有所不同?

trans by 2020-08-07T00:42:19Z

启动Scala插入程序时,“拾取JAVA_TOOL_OPTIONS:-javaagent:/usr/share/java/jayatanaag.jar”

在Ubuntu 14.04中运行Scala解释器时,我得到以下消息作为第一行打印:

Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 

随后是熟悉的“欢迎使用Scala”消息。

我很担心,因为我以前没有运行过Scala时曾见过-这是什么意思,是否很危险等等?

显然,环境变量$JAVA_TOOL_OPTIONS设置为-javaagent:/usr/share/java/jayatanaag.jar-我没有设置该变量,但是为什么?为什么? 我可以放心设置吗?

附加信息:

  • 最近安装的Android Studio
  • JAR名称中的“ ayatana”一词可能指向Ubuntu的项目Ayatana
trans by 2020-08-06T09:45:52Z

Scala的实验性虚拟模式匹配器是什么?

最近,我已经看到很多针对Scala的新型“虚拟”模式匹配器的提及。 我错过了解释它实际上是什么的备忘录。

trans by 2020-08-06T09:13:32Z

访问斯卡拉期货返回的价值

我是scala期货的新手,并且对scala期货的回报价值有疑问。

因此,一般来说,scala未来的语法是

 def downloadPage(url: URL) = Future[List[Int]] {

 }

我想知道如何从其他调用此方法的方法访问29988428428119911991。

换一种说法,

val result = downloadPage("localhost") 

那么应该采取什么方法使29988428428119911991脱离未来?

我尝试使用地图方法,但无法成功执行此操作。

trans by 2020-08-06T02:58:09Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共41页