javascript

java

python

c#

node.js

android

reactjs

c++

php

jquery

html

css

git

ruby-on-rails

.net

ios

sql

c

string

ruby

在Scala中,“视图”有什么作用?

具体来说,我在这里看问题1

[http://pavelfatin.com/scala-for-project-euler/]

列出的代码如下

val r = (1 until 1000).view.filter(n => n % 3 == 0 || n % 5 == 0).sum

除了“查看”,我可以关注所有内容。 实际上,如果我查看视图,代码仍然可以编译并产生完全相同的答案。

trans by 2019-10-15T07:21:04Z

scala-集,函子和等式混淆

最近在讨论有关集合的问题,该集合在Scala中支持Set方法以及该方法如何导致错误,例如

scala> val words = Set("one", "two", "three")
scala> words zip (words map (_.length))
res1: Set[(java.lang.String, Int)] = Set((one,3), (two,5))

我认为很明显Sets不应该支持Functor241操作,因为这些元素没有顺序。 但是,有人提出问题是2568268482429329322242并不是真正的函子,不应使用Functor243方法。 当然,您可以通过映射集合来使自己陷入困境。 现在切换到Haskell,

data AlwaysEqual a = Wrap { unWrap :: a }

instance Eq (AlwaysEqual a) where
    _ == _ = True

instance Ord (AlwaysEqual a) where
    compare _ _ = EQ

现在在ghci

ghci> import Data.Set as Set
ghci> let nums = Set.fromList [1, 2, 3]
ghci> Set.map unWrap $ Set.map Wrap $ nums
fromList [3]
ghci> Set.map (unWrap . Wrap) nums
fromList [1, 2, 3]

因此Set无法满足函子定律

    fmap f . fmap g = fmap (f . g)

可以说这不是2568268482429329322241s上的Set操作的失败,而是我们定义的Eq实例的失败,因为它不遵守替换法则,即A和B上的两个256826848242932222243和 然后映射Monad

    if x == y (on A) then f x == f y (on B)

不适用于Set(例如,考虑Functor)。

替代法是否是我们应该遵守的2568268482429329322240类型的明智法? 当然,我们的2568268482429329322241类型也遵守了其他平等法则(对对称性,传递性和反射性的满足很少),因此替代是我们唯一遇到麻烦的地方。

对我来说,替代2568268482429329322240类似乎是非常理想的属性。 另一方面,最近Reddit讨论中的一些评论包括

“替换似乎比必要的要强大,并且基本上是在商谈类型,对使用该类型的每个函数都提出了要求。”

-Godofpumpkins

“我也确实不希望替换/同余,因为我们有很多合法的用途要与之相等,但它们在某种程度上是可以区分的。”

-sclv

“替代只为结构平等而成立,但没有人坚持认为Set是结构性的。”

-爱德华

这三个在Haskell社区中都是众所周知的,因此我很犹豫反对它们,并坚持要求我的Set类型具有可替换性!

反对Set的另一个论点是Functor-众所周知,作为Eq242允许您在保留形状的同时变换“集合”的“元素”。 例如,Haskell Wiki上的此引用(请注意FunctorMonad的概括)

“其中2568268468482429322240使您能够遍历结构处理元素,但丢弃形状,而Functor241可让您在保留形状的同时做到这一点,例如,输入新的值。”

Set是关于按原样保留该结构。”

在现实世界中

“ ... [仿函数]必须保留形状。集合的结构不应受到仿函数的影响;只有其包含的值才应更改。”

显然,任何Set的仿函数实例都可以通过减少集合中的元素数量来更改形状。

但是,似乎2568268482429329322240s确实应该是函子(暂时忽略了2568268482429329322241的要求-我认为这是由于我们渴望有效地使用集合而施加的人为限制,而不是对任何集合的绝对要求。例如,函数集 不管怎样,Oleg都展示了如何为Eq编写高效的Functor和Monad实例,这些实例不需要Functor约束)。 它们有很多不错的用途(对于不存在的2568268482429329322244实例也是如此)。

谁能解决这个烂摊子? Set应该是Functor吗? 如果是这样,那么对于违反Functor法则的潜力有何作用? Eq的法律应该是什么,它们如何与Functor特别是256826848244609999456的法律相互影响?

trans by 2019-10-14T02:03:10Z

scala-Groovy集合的地图方法

Groovy中是否有map方法? 我想对以下Scala代码段执行类似的操作:

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.map(_ + 1)
res0: List[Int] = List(2, 3, 4)
trans by 2019-10-13T23:26:31Z

配置在Eclipse中运行

我是Scala的初学者。 我在eclipse中安装了Scala IDE,现在我想运行我的应用程序。 它从不显示“以Scala应用程序运行”,而是显示“以Java应用程序运行”或“ Java小程序”

我打开“运行配置”,然后单击“ Scala应用程序”,我的项目名称是“ test”,第二列是“ Class Main”。 我必须填写什么? 我填写了“ Main.Scala”,但状态为“找不到mainmain类main.scala”。

您可以协助我执行这个专案吗?

trans by 2019-10-12T08:11:27Z

java-通过Grad测试时记录

在测试时,Gradle似乎将stdout / stderr重定向到project_dir/build/reports/tests/index.html。是否有办法避免这种重定向,而是将内容打印到控制台上?

附加信息:

  • 这是一个Scala 2.9.1项目。
  • 我正在使用slf4s进行日志记录。
trans by 2019-10-11T22:33:45Z

scala-在ubuntu上安装sbt

我已经在Ubuntu上安装了sbt。

:~/bin/sbt/bin$ ls
classes    sbt      sbt-launch.jar       target
jansi.jar  sbt.bat  sbt-launch-lib.bash  win-sbt

但是,每当我尝试从sbt所在的目录启动sbt时,它都无法工作:

No command 'sbt' found, did you mean:
 Command 'skt' from package 'latex-sanskrit' (universe)
 Command 'sb2' from package 'scratchbox2' (universe)
 Command 'sbd' from package 'cluster-glue' (main)
 Command 'mbt' from package 'mbt' (universe)
 Command 'sbmt' from package 'atfs' (universe)
 Command 'lbt' from package 'lbt' (universe)
 Command 'st' from package 'suckless-tools' (universe)
 Command 'sb' from package 'lrzsz' (universe)

我是Linux新手,我不知道如何解决此问题。

trans by 2019-10-11T15:55:41Z

scala-在Lift的SiteMap中,冒号,下划线和星号是什么意思(条目:_ *)?

我在同时学习Scala和Lift,并且对理解用于在Boot.scala中初始化SiteMap的语法感到困惑:

 val entries = Menu(Loc("Home", "/", "Home")) :: 
       Menu(Loc("Foo", "/badger", "Foo")) ::
       Menu(Loc("Directory Foo", "/something/foo", "Directory Foo")) :: Nil 
 LiftRules.setSiteMap(SiteMap(entries:_*))

SiteMap参数的确切含义是什么?我看到值条目是菜单列表。 什么是冒号,下划线,星号?起初我以为这是List上的一种方法,但是我找不到这样的定义...

trans by 2019-10-11T03:08:01Z

不可知的语言-使用软件事务存储有任何现实世界的经验吗?

似乎最近对STM(软件事务存储)框架和语言扩展有了越来越高的兴趣。 Clojure特别具有出色的实现,它使用MVCC(多版本并发控制)而不是滚动提交日志。 GHC Haskell还具有非常优雅的STM monad,它也可以进行交易组合。 最后,为了稍微说一下我自己的号角,我最近为Scala实现了一个STM框架,该框架静态地强制执行引用限制。

所有这些都是有趣的实验,但似乎仅限于该领域(实验)。 所以我的问题是:你们中的任何人在现实世界中见过或使用过STM吗? 如果是这样,为什么? 它带来了什么好处? 性能如何? (在这一点上似乎有很多相互矛盾的信息)您将再次使用STM还是更喜欢使用其他并发抽象(例如actor)?

trans by 2019-10-09T19:19:24Z

运算符-Scala中的Akka,感叹号和问题M

向演员发送消息时,感叹号(!)和问号(?)有什么区别?

myActor ! Hello(value1)
myActor ? Hello(value1)
trans by 2019-10-09T09:11:21Z

java-可以使用哪些编程语言在Android中开发?

可能重复:
我可以在Android Dalvik上使用哪些编程语言?

通常,Android应用程序是用Java编写的。 但是我听说也可以使用Scala或其他语言。 而且我还读到,可以包含本机C / C ++代码。

是否有可用的参考/清单显示可以使用的语言?

trans by 2019-10-09T04:10:49Z

是否在sbt中为Scala项目执行Java版本?

我的scala应用程序只能在Java 7上运行,因为它依赖于仅出现在该JDK版本中的库。

我如何在sbt中强制执行该操作,以便在启动sbt来运行/编译应用程序时使用错误版本的Java的用户立即显示正确的错误消息?

注意:没有Java™源代码可在此处进行编译。 我只有Scala源代码。 Scala代码要求使用Java 7中提供的import java.nio.file.Path

trans by 2019-10-09T00:36:22Z

scala-通过键Spark写入多个输出-一个Spark作业

如何在单个Job中使用Spark写入取决于键的多个输出。

相关:通过扩展Hadoop(一个MapReduce作业)写入多个输出

例如。

sc.makeRDD(Seq((1, "a"), (1, "b"), (2, "c")))
.writeAsMultiple(prefix, compressionCodecOption)

将确保cat prefix/2

a
b

cat prefix/2将是

c

编辑:我最近添加了一个新的答案,其中包括完整的导入,pimp和压缩编解码器,请参阅[https://stackoverflow.com/a/46118044/1586965,],除了较早的答案之外,它可能还会有所帮助。

trans by 2019-10-08T22:07:48Z

在J中使用Scala特征和已实现的方法

我想不可能从Java调用以Scala特质实现的方法,或者有办法吗?

假设我在Scala中:

trait Trait {
  def bar = {}
}

在Java中,如果我将其用作

class Foo implements Trait {
}

Java抱怨Trait is not abstract and does not override abstract method bar() in Trait

trans by 2019-10-08T05:10:56Z

数据库-是否有不适合Java / scala的类似dbunit的框架?

我当时正在考虑创建一个新的轻量级数据库填充框架。 我绝对讨厌dbunit。 在我这样做之前,我想知道是否有人已经这样做了。

我不喜欢dbunit的事情:

1)不建议使用最简单的书写和入门格式。 他们希望您使用过时的格式。 有些甚至需要xml模式。 好吧,无所谓了。

2)它们不是按照您编写它们的顺序来填充行,而是按照xml文件中定义的顺序表来填充行。 这真的很糟糕,因为您不能以外键约束不会引起问题的方式对数据进行排序。 这只会迫使您经历将它们全部关闭的麻烦。

这还会浪费时间,并使您的junit基类膨胀,以包含禁用外键约束的代码。 您可能必须测试数据库类型(hsqldb等),然后以特定于数据库的方式禁用它们。 这太糟糕了。

如果dbunit帮助自动禁用外键约束作为其框架的一部分会更好,但是他们不这样做。 他们确实会跟踪方言...为什么不为此使用它们呢? 最终,所有这一切都迫使程序员浪费时间,而不能迅速起床并进行测试。

3)XML很难编写。 我无需多说。 他们还提供了很多方法来实现这一目标,我认为这只会使事情复杂化。 只需提供一种真正可靠的方法即可完成。

4)当您的数据变大时,跟踪id及其一致/正确的关系是一件大事。

另外,如果您一个月不从事项目工作,您如何还记得user_id 1是管理员,user_id 2是业务用户,user_id 3是工程师,user_id 4是其他东西? 回去检查这是在浪费更多时间。 除了任意数量之外,应该有一种有意义的方法来检索它。

5)很慢。 我发现除非使用hsqldb,否则它的运行速度会非常缓慢。 不一定是。 还有很多方法可以弄乱它的配置,因为“开箱即用”并不容易。 您必须经历一个驼峰才能使其正常工作。 所有这些都是鼓励人们不要使用它,或者对他们何时开始使用它感到生气。

6)有些值往往会重复很多,例如日期。 最好指定默认值,甚至让框架自动将默认值放进去,即使您不告诉它在其中放默认值也是如此。 这样,您就可以只使用所需的值创建对象,而将其余的保留下来。 如果不需要,可以确保指定列的每个角和裂缝。

7)可能最令人讨厌的是,第一个条目必须包含所有值-甚至是空占位符-否则以后的行将不会选择您实际指定的列。

DBunit对于将[NULL]转换为真实的null值也没有明智的默认设置。 您必须手动添加它。 告诉我,谁还没有使用dbunit完成此操作? 每个人都有。 不应该是这样!

这意味着如果您有一个多态对象,则必须声明第一行中每个子类的联接表的所有外键,即使它们为空。 如果为所有子类模式创建表,则仍必须在第一行中指定所有字段。 这太可怕了。

有什么让我满意的,还是我应该成为更好的数据库测试框架的下一个框架开发人员?

trans by 2019-10-07T14:58:33Z

scala-fold和foldLeft或foldRight之间的区别?

注意:我使用的是Scala 2.8,这可能是个问题吗?

为什么不能使用与foldfoldRight相同的方式使用foldLeft函数?

在Set scaladoc中说:

折叠的结果只能是此并行集合的类型参数foldLeft的超类型。

但是我看不到函数签名中的类型参数foldLeft

def fold [A1 >: A] (z: A1)(op: (A1, A1) ⇒ A1): A1

foldLeftfold之间有什么区别,我该如何使用后者?

编辑:例如,我将如何写一个折叠以添加列表中的所有元素? 使用foldLeft,它将是:

val foo = List(1, 2, 3)
foo.foldLeft(0)(_ + _)

// now try fold:
foo.fold(0)(_ + _)
>:7: error: value fold is not a member of List[Int]
  foo.fold(0)(_ + _)
    ^
trans by 2019-10-07T05:59:44Z

Scala中的@inline注释真的有助于提高性能吗?

还是只是将代码弄乱了,而JIT还是会自动对其进行处理?

trans by 2019-10-07T01:44:28Z

Scala多类型模式匹配

我想知道如何使用多种类型模式匹配。 我有:

abstract class MyAbstract

case class MyFirst extends MyAbstract
case class MySecond extends MyAbstract
case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething()

val x: MyAbstract = MyFirst

x match { 
 case a: MyFirst => doSomething()
 case b: MySecond => doSomething()
 case _ => doSomethingElse()
}

所以我想写一些类似的东西:

x match {
 case a @ (MyFirst | MySecond) => doSomething()
 case _ => doSomethingElse()
}

我在一些教程中看到了类似的构造,但是它给了我错误:

pattern type is incompatible with expected type;
[error]  found   : object MyFirst
[error]  required: MyAbstract

那么有没有办法在on case子句中定义几种不同的类型? 我认为这会使代码更漂亮。 好像我将拥有5个一样,我将编写5次相同的代码(调用doSomething())。

提前致谢!

trans by 2019-10-05T23:35:33Z

Scala中所有语法糖的实例是什么?

Scala中所有语法糖的实例是什么?

由于大多数/全部都是纯符号,因此很难搜索它们,因此很难在不知道概念名称的情况下进行搜索。

去做:

  • 隐式转换
  • _匿名函数的语法
  • 我忘记的其他事情
trans by 2019-10-05T20:14:37Z

scala-泛型中的任何vs下划线

Scala中以下泛型定义之间的区别是什么:

class Foo[T <: List[_]]

class Bar[T <: List[Any]]

我的直觉告诉我它们大致相同,但后者更为明确。 我发现的情况是前者可以编译,而后者不能编译,但是不能完全理解。

谢谢!

编辑:

我可以混入另一个吗?

class Baz[T <: List[_ <: Any]]
trans by 2019-10-05T15:54:32Z

在Scala中,什么是“早期初始化程序”?

在Martin Odersky最近关于Scala中程序员能力水平的帖子中,在Expert库设计器部分中,他包含了“早期初始化程序”一词。

这些在Scala编程中没有提到。 这些是什么?

trans by 2019-10-05T09:33:01Z

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