小编sjr*_*jrd的帖子

如何将案例类转换为Map(在Scala.js中)

我怎么能转换case class到一个Map地方的领域case class成为关键?

例如:

case class Person(name: String, age: Int)

val p = Person("dude", 89)
val map = p.toMap // <-- ???
Run Code Online (Sandbox Code Playgroud)

这样map等于下面的地图:

Map("name" -> "dude", "age" -> 89)
Run Code Online (Sandbox Code Playgroud)

scala scala.js

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

为什么Scala编译器不接受这个lambda作为参数?

假设我有一个接口Thing:

abstract class Thing[A](a_thing: A) {
  def thingA = a_thing
}
Run Code Online (Sandbox Code Playgroud)

我实现Thing如下:

class SpecificThing(a: String) extends Thing[String](a)
Run Code Online (Sandbox Code Playgroud)

此外,假设我有一个函数,它接受一个Thing和一个lambda做的事情Thing作为参数:

def doSomething[A](fn: Thing[A] => A, t: Thing[A]) : A = fn(t)
Run Code Online (Sandbox Code Playgroud)

现在,让我们使用这些东西:

val st = new SpecificThing("hi")
val fn1: (Thing[String]) => String = (t: Thing[String]) => { t.thingA }
println(doSomething(fn1, st))
Run Code Online (Sandbox Code Playgroud)

这打印hi.到现在为止还挺好.但我很懒,而且我不喜欢打字这么多,所以我将程序改为以下内容:

type MyThing = Thing[String]
val st = new SpecificThing("hi")
val fn2: (MyThing) => String = (t: MyThing) => { t.thingA …
Run Code Online (Sandbox Code Playgroud)

generics lambda scala

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

Scala:在没有val的情况下分配一次变量

这就是我想要做的 -

class A(some args) {
  var v: SomeType = null
  def method1(args) = {
    v = something1
    ...
    method3
  }

  def method2(args) = {
    v = something2
    ...
    method3
  }
  def method3 = {
    // uses v
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种特定情况下,方法1和2是互斥的,并且它们中的任何一个在A的实例的生命周期中恰好被调用一次.此外,v被分配一次.我宁愿把它变成val.但是因为我需要method2或method3的上下文来初始化v,所以我不能在构造函数中这样做.

怎么能实现这种"val"行为?我可以考虑修改method1和method2来应用方法,但我不喜欢这个想法.此外,方法1和2具有相同的参数签名(因此应用将需要更多信息来区分这两种类型的调用).

scala

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

在Scala中的列表中查找元素

我正在尝试编写一个函数myfoo,它采用Int和一个int列表,验证int元素是否在列表中.如果int在列表中,它应返回"true",否则返回false.我已经写了这个函数,但是当我编译它时会返回这个错误:

error: type mismatch;    
 found   : Unit   
 required: Boolean    
        breakable { for  (i <-l) {   
                          ^
one error found*   
Run Code Online (Sandbox Code Playgroud)

这是我的计划:

import scala.util.control.Breaks._

object findEl extends App{
    def myfoo (x:Int,l:List[Int]):Boolean={
        breakable { for  (i <-l) {
        i match {
            case a if (a==x) => true
            case _ => false
            break
            } 
        }
    }
}

    println(myfoo(1,List(1,2,3,4))) //should print "true"
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决?:)

scala list pattern-matching

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

标签 统计

scala ×4

generics ×1

lambda ×1

list ×1

pattern-matching ×1

scala.js ×1