相关疑难解决方法(0)

什么是Scala上下文和视图边界?

简单来说,什么是上下文和视图边界,它们之间有什么区别?

一些易于理解的例子也很棒!

scala implicits

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

什么是Scala标识符"隐式"?

我见过一个implicitly在Scala示例中使用的函数.它是什么,它是如何使用的?

这里的例子:

scala> sealed trait Foo[T] { def apply(list : List[T]) : Unit }; object Foo {
     |                         implicit def stringImpl = new Foo[String] {
     |                             def apply(list : List[String]) = println("String")
     |                         }
     |                         implicit def intImpl = new Foo[Int] {
     |                             def apply(list : List[Int]) =  println("Int")
     |                         }
     |                     } ; def foo[A : Foo](x : List[A]) = implicitly[Foo[A]].apply(x)
defined trait Foo
defined module Foo
foo: [A](x: List[A])(implicit evidence$1: Foo[A])Unit

scala> foo(1)
<console>:8: error: …
Run Code Online (Sandbox Code Playgroud)

scala implicits

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

如何在Scala中链接implicits?

pimp-my-library模式允许我通过提供从该类到实现该方法的类的隐式转换,似乎向类添加方法.

斯卡拉不允许两个这样的隐式转换正在发生,但是,我不能得到AC使用隐含AB和另一个隐含的BC.有没有办法解决这个限制?

scala implicit-conversion implicits

76
推荐指数
2
解决办法
7593
查看次数

Scala中有多少含义?

如果我没有导入除Scala通常默认值之外的任何内容,那么范围内有多少含义(隐式转换)?

是否有完整的列表,最好按照他们可以采取行动的类型进行组织?

scala implicit type-conversion implicit-conversion

16
推荐指数
3
解决办法
2034
查看次数

将scala.math.Integral作为隐式参数传递

我已经阅读了关于scala.math.Integral的问题的答案但是我不明白当作为隐式参数传递时会发生什么.(我想我一般都理解隐式参数概念).Integral[T]

让我们考虑一下这个功能

import scala.math._

def foo[T](t: T)(implicit integral: Integral[T]) { println(integral) }
Run Code Online (Sandbox Code Playgroud)

现在我打电话给fooREPL:

scala> foo(0)  
scala.math.Numeric$IntIsIntegral$@581ea2
scala> foo(0L)
scala.math.Numeric$LongIsIntegral$@17fe89
Run Code Online (Sandbox Code Playgroud)

怎样的integral争论变得scala.math.Numeric$IntIsIntegralscala.math.Numeric$LongIsIntegral

scala implicit

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

Scala:隐式参数解析优先级

假设我们只有局部范围的隐式参数查找:

trait CanFoo[A] {
  def foos(x: A): String
}

object Def {
  implicit object ImportIntFoo extends CanFoo[Int] {
    def foos(x: Int) = "ImportIntFoo:" + x.toString
  }
}

object Main {
  def test(): String = {
    implicit object LocalIntFoo extends CanFoo[Int] {
      def foos(x: Int) = "LocalIntFoo:" + x.toString
    }
    import Def._

    foo(1)
  }

  def foo[A:CanFoo](x: A): String = implicitly[CanFoo[A]].foos(x)
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,LocalIntFoo胜过ImportedIntFoo.有人可以使用"静态重载决策规则(§6.26.3)"来解释它是如何被认为更具体的吗?

编辑:

名称绑定优先级是一个引人注目的参数,但有几个问题尚未解决.首先,Scala语言参考说:

如果有几个符合条件的参数与隐式参数的类型匹配,则将使用静态重载决策的规则(第6.26.3节)选择最具体的参数.

其次,名称绑定优先级是关于在范围内有多个变量/方法/对象的情况下解析x特定成员的已知标识符.并且没有相同的名称.pkg.A.B.xxImportIntFooLocalIntFoo

第三,我可以证明单独的 …

scala implicit

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

Scala项目组织

如何在Scala项目中组织代码?

经过多年的Java开发(大部分时间都使用Spring),我们试图在Scala中提出一个快速原型.

弹出的第一个问题之一是:我们基本上只使用相同的软件包名称和代码组织,只是在Scala中编写代码吗?

例如,我们曾经有过的助手为我们的实体(AccountHelper,CacheHelper ...),也有时我们使用的服务太(帐户服务...).

ot:更远的地方我们还将研究如何将我们的maven子模块移植到sbt,但这完全是另一回事.

scala organization

12
推荐指数
3
解决办法
3442
查看次数

在scala中从Int到Double的隐式转换不起作用

我已经编写了一些隐式代码,如下所示,我想知道为什么i2d不调用函数隐式对话.

object Test {
  implicit def i2d(x: Int): Double = {
    println("foo")
    x.toDouble
  }

  implicit def d2i(x: Double): Int = {
    x.toInt
  }

  val x: Int = 10
  val y: Double = x
  val z: Int = 3.5
}
Run Code Online (Sandbox Code Playgroud)

输出scalac -Xprint:typer Test.scala

// Test.scala
[[syntax trees at end of typer]] 
package <empty> {
  object Test extends scala.AnyRef {
    def <init>(): Test.type = {
      Test.super.<init>();
      ()
    };
    implicit def i2d(x: Int): Double = {
      scala.this.Predef.println("foo");
      x.toDouble …
Run Code Online (Sandbox Code Playgroud)

scala implicit-conversion scalac

11
推荐指数
1
解决办法
3137
查看次数

在Scala中,是否可以使用implicits自动覆盖toString?

在Java中,我会做类似的事情

class MyDate extends java.util.Date {
  public String toString() { ... }
}

MyDate date = new MyDate
Run Code Online (Sandbox Code Playgroud)

有点笨重.在Scala中,是否可以覆盖toString,同时仍然使用常规的java.util.Date而不是MyDate.我有一个暗示涉及但很乐意使用任何技术

scala

8
推荐指数
1
解决办法
1765
查看次数

如何调用Scala抽象类型的构造函数?

我正在试图弄清楚如何为Scala抽象类型调用构造函数:

class Journey(val length: Int)
class PlaneJourney(length: Int) extends Journey(length)
class BoatJourney(length: Int) extends Journey(length)

class Port[J <: Journey] {
  def startJourney: J = {
    new J(23) // error: class type required but J found
  }
}
Run Code Online (Sandbox Code Playgroud)

这甚至可行吗?我熟悉Scala清单,但我不清楚它们如何在这里提供帮助.同样,我无法弄清楚如何对伴侣对象的apply()构造函数做同样的事情:

object Journey { def apply() = new Journey(0) }
object PlaneJourney { def apply() = new PlaneJourney(0) }
object BoatJourney { def apply() = new BoatJourney(0) }

class Port[J <: Journey] {
  def startJourney: J = {
    J() // error: …
Run Code Online (Sandbox Code Playgroud)

scala

8
推荐指数
2
解决办法
1280
查看次数