小编Lui*_*hys的帖子

Scala list concatenation,::: vs ++

在Scala中连接列表:::++列表之间是否有任何区别?

scala> List(1,2,3) ++ List(4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)

scala> List(1,2,3) ::: List(4,5)
res1: List[Int] = List(1, 2, 3, 4, 5)

scala> res0 == res1
res2: Boolean = true
Run Code Online (Sandbox Code Playgroud)

文档看起来++是更普遍的,而:::List特异性的.提供后者是因为它用于其他功能语言吗?

scala list concatenation

345
推荐指数
4
解决办法
15万
查看次数

在Notepad ++中选择换行符

我注意到当我加载文本文件时,Notepad ++将识别并使用该文件中的换行符,\n或者\r\n.

是否有一些选项可以选择在新文档中使用哪个?(我看了帮助和谷歌搜索,但找不到任何东西.)

notepad++ eol

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

如何优化Scala中的for-understanding和循环?

所以Scala应该和Java一样快.我正在重新审视我最初用Java解决的Scala中的一些Project Euler问题.具体问题5:"从1到20的所有数字均可被整除的最小正数是多少?"

这是我的Java解决方案,在我的机器上完成需要0.7秒:

public class P005_evenly_divisible implements Runnable{
    final int t = 20;

    public void run() {
        int i = 10;
        while(!isEvenlyDivisible(i, t)){
            i += 2;
        }
        System.out.println(i);
    }

    boolean isEvenlyDivisible(int a, int b){
        for (int i = 2; i <= b; i++) {
            if (a % i != 0) 
                return false;
        }
        return true;
    }

    public static void main(String[] args) {
        new P005_evenly_divisible().run();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我对Scala的"直接翻译",需要103秒(147倍!)

object P005_JavaStyle {
    val t:Int = 20;
    def run {
        var …
Run Code Online (Sandbox Code Playgroud)

java performance for-loop scala while-loop

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

隐式类是否应该扩展AnyVal?

说我正在写一个扩展方法

implicit class EnhancedFoo(foo: Foo) {
  def bar() { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)

你应该总是extends AnyVal在课堂上定义吗?在什么情况下你不想让隐式类成为一个值类?

scala implicit-conversion

55
推荐指数
1
解决办法
8937
查看次数

Scala中的有效标识符字符

我觉得很困惑的一件事是知道我可以在方法和变量名中使用哪些字符和组合.例如

val #^ = 1 // legal
val #  = 1 // illegal
val +  = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬  = 1 // legal
Run Code Online (Sandbox Code Playgroud)

据我了解,字母数字标识符运算符标识符之间存在区别.除非用下划线(混合标识符)分隔,否则您可以将一个匹配或另一个匹配但不能同时混合.

Scala中的编程 6.10节,

运算符标识符由一个或多个运算符字符组成.运算符字符是可打印的ASCII字符,例如+,:,?,〜或#.

更确切地说,运算符字符属于Unicode数学符号集(Sm)或其他符号(So),或者不是字母,数字,括号,方括号,花括号,单个或双精度的7位ASCII字符引号,或下划线,句号,分号,逗号或后退字符.

所以我们被排除在使用()[]{}'"_.;,和`之外

我抬起头,统一的数学符号的维基百科,但我发现没有包括的那些+,:,?等是否有一个明确的清单某处的运营商角色是什么?

此外,任何想法为什么Unicode数学运算符(而不是符号)不算作运算符?

scala operators

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

Scala中的无限流

说我有一个功能,例如旧的最爱

def factorial(n:Int) = (BigInt(1) /: (1 to n)) (_*_)
Run Code Online (Sandbox Code Playgroud)

现在,我想找到的最大的价值n为它factorial(n)镶嵌在长.我可以

(1 to 100) takeWhile (factorial(_) <= Long.MaxValue) last
Run Code Online (Sandbox Code Playgroud)

这是有效的,但100是任意大数; 在左侧我真正想要的是一个无限的流,它会一直产生更高的数字,直到满足takeWhile条件.

我想出来了

val s = Stream.continually(1).zipWithIndex.map(p => p._1 + p._2)
Run Code Online (Sandbox Code Playgroud)

但有更好的方法吗?

(我也知道我可以递归地得到一个解决方案,但这不是我正在寻找的.)

scala stream

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

Scala String vs java.lang.String - 类型推断

在REPL中,我定义了一个函数.请注意返回类型.

scala> def next(i: List[String]) =  i.map {"0" + _} ::: i.reverse.map {"1" + _}
next: (i: List[String])List[java.lang.String]
Run Code Online (Sandbox Code Playgroud)

如果我将返回类型指定为String

scala> def next(i: List[String]): List[String] = i.map {"0" + _} ::: i.reverse.map {"1" + _}
next: (i: List[String])List[String]
Run Code Online (Sandbox Code Playgroud)

为什么不同?我也可以将返回类型指定为List [Any],所以我猜String只是java.lang.String的包装器超类型.这有任何实际意义,还是我可以安全地不指定退货类型?

string types scala type-inference

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

Scala的Vector如何工作?

我读了这篇关于Scala集合的时间复杂性的页面.正如它所说,Vector复杂性适用eC于所有运营.

这让我想知道Vector是什么.我阅读了该文件并说:

因为向量在快速随机选择和快速随机功能更新之间取得了良好的平衡,所以它们目前是不可变索引序列的默认实现.它由一个小的端点位映射矢量trie支持,分支因子为32.局部性非常好,但不是连续的,这对于非常大的序列是有益的.

和Scala的其他一切一样,它很模糊.实际上是如何Vector工作的?

scala data-structures

34
推荐指数
3
解决办法
5293
查看次数

除了零参数方法之外,为什么Scala需要无参数?

我理解零参数和无参数方法之间的区别,但我真正理解的是语言设计选择,这使得无参数方法成为必要.

我能想到的缺点:

  • 这令人困惑.每隔一两周,这里或Scala邮件列表上都有关于它的问题.
  • 情况很复杂; 我们还要区分() => X=> X.
  • 这是不明确的:它的x.toFoo(y)意思是什么,或者x.toFoo.apply(y)?(答:这要看是什么重载还有xtoFoo方法和重载Fooapply方法,但如果有冲突,你不会看到一个错误,直到您尝试调用它.)
  • 它混淆了操作符样式方法调用语法:链接方法时,没有符号可用于代替参数,或者最后避免使用分号干扰.使用零参数方法,您可以使用空参数列表().

目前,您不能在类中定义两者:您会收到一条错误消息,说明该方法已定义.他们也都转换为Function0.

为什么不只是制作方法def foodef foo()完全相同的东西,并允许使用括号或不使用括号来调用它们?它的优点是什么?

scala

33
推荐指数
5
解决办法
5878
查看次数

Scalatest - 如何测试println

Scalatest中有什么东西允许我通过println声明测试输出到标准输出吗?

到目前为止,我一直在使用FunSuite with ShouldMatchers.

例如,我们如何检查打印输出

object Hi {
  def hello() {
    println("hello world")
  }
}
Run Code Online (Sandbox Code Playgroud)

scala scalatest

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