(非常糟糕的标题)
无论如何:我能让Scala推断出第2行中b的类型吗?
scala> class A[B](val b: B, val fun: B => Unit)
defined class A
scala> new A("123", b => { })
<console>:9: error: missing parameter type
new A("123", b => { })
^
在添加以下类型后,此操作与预期的一样:
sc
使用我得到的case类在scala中实现我的域模型
abstract class Entity {
val _id: Option[BSONObjectID]
val version: Option[BSONLong]
}
和几个定义不同实体的case类,如
case class Person (
_id: Option[BSONObjectID],
name: String,
version: Option[BSONLong]
) extends Entity
我需要的是一种方法来设置_id和版本,稍后从一个操作实体的泛型方法,因为我必须在所有实体上共享此
假设我们有以下案例类:
case class CasePerson(firstName: String)
我们还为它定义了一个伴生对象:
object CasePerson {
def apply() = new CasePerson( "XYZ" )
}
请注意,在上面的示例中,我使用apply方法显式地定义了一个伙伴对象,而没有定义默认的应用方法:
// This "default" apply has the same argument as the primary constructor of the case class
def apply(firs
为什么scala会抱怨下面的代码?
scala> class Http(var status: Int)
defined class Http
scala> case class Post(url: String, data: String, status: Int) extends Http(status)
<console>:8: error: overriding variable status in class Http of type Int;
value status needs `override' modifier
case c
我想编写一个泛型函数functionChooser,它将根据字符串参数从几个选项中选择使用哪个函数。
这样做是可行的:
def a (arg: String) = arg + " with a"
def b (arg: String) = arg + " with b"
def c (arg: String) = arg + " with c"
def functionChooser(func: String, additionalArg: String) = {
val f = func match {
case "
我有一个关于scala的case类的问题
scala> case class Person(name:String, age:Int)
scala> val person1 = Person("Posa",30)
scala> val person2 = new Person("Posa",30)
这两个对象(person1和person2)在哪方面不同?
new关键字在这里有什么不同?
我在我的一个项目中使用了scala、spray和akka。在Intellij中,它运行得很好。当我构建项目并试图在命令行中运行它时,我得到了以下错误。
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting
found for key 'akka'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
at com.typesafe.config.im
我想知道为什么我不能对函数参数和类中使用的名称使用相同的名称。请参考以下示例。
scala> class Person() {var name = "bob" }
defined class Person
scala> val p = new Person
p: Person = Person@486f8860
scala> p.name
res0: java.lang.String = bob
scala> p.name = "alice"
scala> p.name
res1: java.lang.String = al
纵观Scala代码,可以通过向object Array添加一个apply方法来实现方便的数组创建语法。起初,我认为这是通过case类以某种方式实现的,因为您可以运行以下命令,但事实似乎并非如此:
Array(1,2,3) match { case Array(a, b, c) => a + b + c }
我知道我还需要查看WrappedArray和所有超类,但是我不知道scala是如何在数组上实现这种匹配的(我需要更熟悉scala集合的类层次结构)。它当然不适用于一个普通的类。
scala> class A(val x: Int)
scala> new A(4) mat
我想知道是否可以抽象案例类的复制方法。基本上,我有一些类似sealed trait Op的东西,然后像case class Push(value: Int) extends Op和case class Pop() extends Op。
第一个问题:没有参数/成员的case类没有定义复制方法。您可以在REPL中尝试这一点。
scala> case class Foo()
defined class Foo
scala> Foo().copy()
<console>:8: error: value copy is not a member of Foo
F
我刚刚开始学习scala,并且在对类型参数的一般理解方面有一些问题。以前我学过Haskell,但是在scala中,我觉得很困惑。我不清楚应该在哪里放置类型参数(近类定义或函数定义)。
考虑一下这个例子:
class Person[A] {
def sayName (name: A) = println(name)
}
将类型参数从一个类移到另一个函数是否有意义?
class Person {
def sayName[A] (name: A) = println(name)
}
或者,我甚至可以将类型参数留在类和函数中,这样就可以了。会有很大的不同吗?函数中的A参数会覆盖类定义中的相同参
我是scala的新手。是我正在尝试编写的Models.scala。当我运行sbt包时,它给出错误
Models.scala:25: models.Session.Network.type does not take parameters
[error] network : Network = Network() ,
我不明白为什么会发生这个错误,我在执行Network()时没有传递任何参数。有人能帮帮我吗?
我一直在尝试:
class Foo(bar: Int)
vs:
class Foo(private val bar: Int)
它们的行为似乎是一样的,尽管我在任何地方都找不到(bar: Int)扩展到(private val bar: Int)的说法,所以我的问题是,它们是相同/相似的吗?
顺便说一句,我一直在尝试对这些代码片段使用-Xprint:typer,它们生成相同的代码,只是在第二个代码片段中多了一行。我该怎么读这多出来的一行呢?
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val
在Scala2.12中,我可以用case对象实现一个髓质方法:
trait T[X] {
def f: X
}
trait XImpl {
def sayHi: String
}
object O extends T[XImpl] {
case object f extends XImpl {
val sayHi = "Hi"
}
}
> defined trait T
> defined trait XImpl
> defined object O
但是,如果我添加了一个带有参数的方法,并用case类实现了它,那么它就不能工作:
trait
似乎copy并不保留原始实例中的任何状态,而只是使用基类定义来创建一个具有新值的新实例。有人知道为什么会这样实现吗?
scala> case class A(){ var y = 2 }
defined class A
scala> val a = new A()
a: A = A()
scala> a.y = 9
a.y: Int = 9
scala> a.y
res9: Int = 9
scala> val b = a.copy()
b: A = A()
scala> b.y
res10: Int = 2
我试图按以下方式使用:
import io.estatico.newtype.macros.newtype
import cats._
import io.databaker.env._
@newtype case class DbUrl(v: String)
@newtype case class DbUser(v: String)
@newtype case class DbPw(v: String)
final case class DbParams(url: DbUrl, user: DbUser, pw: DbPw)
trait DbConnector[F[_]] {
我正在学习Scala,并试图为一个项目获得一个简单的enum设置。我检查了几个示例,似乎没有一个适合,Scala文档和StackOverflow中的所有示例都是对象内部的枚举,而不是类。我收到了一个我不明白的IDE警告。我正从一个初学者的Java背景转到Scala,这可能是我困惑的原因。
下面是代码:
class Car(maxSpeed: Integer) {
// Enums
object CarType extends Enumeration {
type CarType = Value
val PERIPHERAL, COMPUTER, EMPTY = Val
给出两种代数数据类型:A和Foo
scala> sealed trait A
defined trait A
scala> case object B extends A
defined object B
scala> sealed trait Foo
defined trait Foo
scala> case class FooImpl(x: Int) extends Foo
defined class FooImpl
一个简单函数f
scala> def f: Foo = FooImpl(5)
f: Foo
最后,我有几个嵌套的match语句/表达式:
我想在scala中编写一个case类,它保存了其他对象的scala.ref.WeakReference。我想知道在scala中这样做的最佳实践是什么。
我对此有几个想法,第一个想法是:
case class CC1(ref: Any) {
private val weakRef: WeakReference[Any] = WeakReference(ref)
def get: Any = weakRef()
}
但这根本行不通,因为scala将在CC1中自动生成一个包含强引用的val。
我的第二个想法是:
case class CC2(private val weakRef:
我使用dataSet API,我有两种案例类。
case class Geo(country:Int, province:Int, city:Int, county:Int)
case class AntiFraudLog(
eventType: Int,
valid: Boolean
)
case class AntiFraudSession(fraudLogs: Seq[AntiFraudLog])
然后我生成了一个键/值对,它的值是一个case类。
val dataKeyValue: DataSet[(Long, AntiFraudLog)]
并尝试使
考虑以下代码:
scala> case class Foo(s:String, t:String, r:String) {
| def == (f:Foo) = s == f.s && t == f.t
| }
defined class Foo
scala> val f1 = Foo("s", "t", "r")
f1: Foo = Foo(s,t,r)
scala> val f2 = Foo("s", "t", "r1")
f2:
我正在介绍一本流行的Spark书中的Scala示例。这对我来说很奇怪,至少对新手来说是这样。我知道Scala中的标准匹配/大小写构造在Scala中是什么样子。但在本例中,我看到使用了'case‘,而没有相应的'match’关键字。它是有效的吗?或者更多的是书中的打字错误?
val joined = userData.join(events)// RDD of (UserID, (UserInfo, LinkInfo)) pairs
val offTopicVisits = joined.filter {
case (userId, (userInfo, linkInfo)) =