小编Jer*_*iho的帖子

scala中Array和List之间的区别

在什么情况下我应该使用Array(Buffer)和List(Buffer).我所知道的唯一区别是数组是非变量的,列表是协变的.但是性能和其他一些特性呢?

arrays scala list scala-collections

129
推荐指数
3
解决办法
6万
查看次数

将mutable转换为不可变映射

private[this]object MMMap extends  HashMap[A, Set[B]] with MultiMap[A, B]
Run Code Online (Sandbox Code Playgroud)

如何将其转换为不可变?

scala mutable immutability scala-collections

71
推荐指数
4
解决办法
5万
查看次数

Scala中的运算符优先级

我喜欢Scala提出的运算符优先级,但在极少数情况下,未经修改的规则可能不方便,因为在命名方法时有限制.有没有办法为Scala中的类/文件等定义另一个规则?如果没有,将来会解决吗?

scala operator-precedence

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

如何找到scala编译器标志/选项的描述?

如何找到最新scalac版本的所有标志?谷歌搜索了几个小时后,我发现只有过时的 文档.(例如,他们甚至没有提到"-feature"标志).

有没有办法从scalac或其他任何东西获取带有描述的编译器标志列表?

scala scalac scala-compiler

33
推荐指数
2
解决办法
6698
查看次数

如何按顺序运行规范

我想创建几个与数据库互操作的规范.

class DocumentSpec extends mutable.Specification with BeforeAfterExample {
  sequential

  def before() = {createDB()}
  def after() = {dropDB()}

  // examples
  // ...
}
Run Code Online (Sandbox Code Playgroud)

在每个示例之前和之后(按顺序执行)创建和删除数据库.Everithing按预期工作,直到只有一个规范适用于数据库.由于规范是并行执行的,因此会干扰和失败.

我希望我能够通过指示specs2顺序运行具有副作用的测试同时保持副作用免费测试并行运行来避免这种情况.可能吗?

scala specs2

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

如何使用光滑进行聚合

我想强制光滑创建像

select max(price) from coffees where ... 
Run Code Online (Sandbox Code Playgroud)

光滑的文档没有帮助

val q = Coffees.map(_.price) //this is query Query[Coffees.type, ...]
val q1 = q.min // this is Column[Option[Double]]
val q2 = q.max
val q3 = q.sum
val q4 = q.avg 
Run Code Online (Sandbox Code Playgroud)

因为那些q1-q4不是查询,我无法获得结果,但可以在其他查​​询中使用它们.

这个说法

for {
  coffee <- Coffees
} yield coffee.price.max
Run Code Online (Sandbox Code Playgroud)

生成正确的查询但不推荐使用(生成警告:"不推荐使用类ColumnExtensionMethods中的方法max:使用Query.max"). 如何在没有警告的情况下生成此类查询?

另一个问题是通过以下方式聚合:

"select name, max(price) from coffees group by name"
Run Code Online (Sandbox Code Playgroud)

试图解决它

for {
  coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
Run Code Online (Sandbox Code Playgroud)

产生

select x2.x3, x2.x3, x2.x4 from (select x5."COF_NAME" …
Run Code Online (Sandbox Code Playgroud)

scala scalaquery slick

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

RESTRICT和NO ACTION之间的区别

postgresql文档:

RESTRICT可防止删除引用的行.NO ACTION表示如果在检查约束时仍存在任何引用行,则会引发错误; 如果您未指定任何内容,则这是默认行为.(这两个选择之间的本质区别在于,NO ACTION允许将支票延迟到交易的后期,而RESTRICT则不会.​​)

让我们检查一下.创建父表和子表:

CREATE TABLE parent (
  id serial not null,
  CONSTRAINT parent_pkey PRIMARY KEY (id)
);

CREATE TABLE child (
  id serial not null,
  parent_id serial not null,
  CONSTRAINT child_pkey PRIMARY KEY (id),
  CONSTRAINT parent_fk FOREIGN KEY (parent_id)
    REFERENCES parent (id) 
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);
Run Code Online (Sandbox Code Playgroud)

填充一些数据:

insert into parent values(1);
insert into child values(5, 1);
Run Code Online (Sandbox Code Playgroud)

并且测试确实被检查了:

BEGIN;
delete from parent where id = 1; -- violates foreign …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-9.2

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

如何在scala中缓存结果?

此页面描述了Map的getOrElseUpdate使用方法:

object WithCache{
  val cacheFun1 = collection.mutable.Map[Int, Int]()
  def fun1(i:Int) = i*i
  def catchedFun1(i:Int) = cacheFun1.getOrElseUpdate(i, fun1(i))
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用catchedFun1哪个将检查是否cacheFun1包含与之关联的键和返回值.否则,它将调用fun1,然后缓存fun1结果cacheFun1,然后返回fun1结果.

我可以看到一个潜在的危险 - cacheFun1可能变得很大.所以cacheFun1必须通过垃圾收集器以某种方式清理?

PS怎么样scala.collection.mutable.WeakHashMap and java.lang.ref.*

caching scala

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

scalacheck中的大型发电机

UserGuide scalacheck项目的提到大小的发电机.解释代码

def matrix[T](g:Gen[T]):Gen[Seq[Seq[T]]] = Gen.sized {size =>
 val side = scala.Math.sqrt(size).asInstanceOf[Int] //little change to prevent compile-time exception
 Gen.vectorOf(side, Gen.vectorOf(side, g))
}
Run Code Online (Sandbox Code Playgroud)

没有为我解释.经过一番探索后,我了解到生成序列的长度并不依赖于生成器的实际大小(Gen对象中的resize方法根据javadoc"创建生成器的大小调整版本"(也许这意味着不同的东西?)).

val g =  Gen.choose(1,5)
val g2 = Gen.resize(15, g)
println(matrix(g).sample) //  (1)
println(matrix(g2).sample) // (2)
//1,2 produce Seq with same length 
Run Code Online (Sandbox Code Playgroud)

你能解释一下我错过了什么,并举例说明你如何在测试代码时使用它们?

scala scalacheck

15
推荐指数
2
解决办法
5552
查看次数

特质混合的限制

我想要的课程只能混合指定的特征:

class Peter extends Human with Lawful with Evil
class Mag extends Elf with Chaotic with Neutral
Run Code Online (Sandbox Code Playgroud)

在Scala中是这样做的吗?

UPD:

trait Law
trait Lawful extends Law
trait LNeutral extends Law
trait Chaotic extends Law

trait Moral
trait Good extends Moral
trait Neutral extends Moral
trait Evil extends Moral

class Hero .........
class Homer extends Hero with Chaotic with Good
Run Code Online (Sandbox Code Playgroud)

我想定义一个Hero在限制客户端程序员混合特定性状的方式类(Lawful/ LNeutral/ ChaoticGood/ Neutral/ Evil),如果他扩展了Hero类.我想找到一些限制/约束客户端代码的其他可能性.

scala traits

10
推荐指数
2
解决办法
3865
查看次数