我使用Scala2.10.2,并且有两个具有相同字段的case类:
case class Foo(id: String, name: String)
case class Bar(id: String, name: String)
我想做这样的事情:
case class Thing(id: String, name: String)
type Foo = Thing
type Bar = Thing
这是编译的,但是当我尝试创建一个Foo时,我得到:
scala> Bar("a", "b")
<console>:8: error: not f
在Scala中,当您查询对象的类或类名时,您将在打印输出的尾部得到一个流氓美元符号("$"):
object DollarExample {
def main(args : Array[String]) : Unit = {
printClass()
}
def printClass() {
println(s"The class is ${getClass}")
println(s"The class name is ${getClass.getName}")
}
}
其结果是:
The class i
在Scala中可以像下面这样表示递归类型定义吗?
type test = Either[List[test], Int]
更新
我的目的是表达如下的功能:
def flatten[T](list: List[Either[List[T], T]]): List[T] = list flatMap {
case Left(list) => list
case Right(element) => List(element)
}
但是它接受类似的任意深度的结构
在使用完全限定的类名参数化Scala中的对象时,我遇到了一个小问题。这是基于Scala 2.9.0.1的。有人知道这段代码出了什么问题吗?
scala> "foo" match {
| case y : Seq[Integer] =>
| case y : Seq[java.lang.Integer] =>
<console>:3: error: ']' expected but '.' found.
case y : Seq[java.lang.Integer] =>
为什么第一个版本可以工作,而第
scala中的type只是在编译期间充当宏的语法糖,还是涉及到其他一些魔术?在这种情况下:
type Bar1 = Foo
type Bar2 = Foo
val bar1 = injector.getInstance(classOf[Bar1])
val bar2 = injector.getInstance(classOf[Bar2])
DI容器能够区分这两个“类型别名”吗?
在各种Scala文献中,我看到一些使用"this“的自类型注释和其他使用”self“的注释:
trait A { this: B => ... }
trait A { self: B => ... }
使用"this“和"self”有什么真正的区别吗?你用什么名字有关系吗?这也同样有效吗?
trait A { foo: B => ... }
我是个新手,我会尽量说清楚。这是关于odersky scala课程的。
我有下面的代码。我理解这是一种别名类型,用于定义Scala集合,与在Scala中定义集合(即Scala集合)的传统方式不同。在此类型别名中,您为其指定一个整数,如果该项包含在集合中,则返回true (以某种方式)。
type Set = Int => Boolean
现在我有了这段代码,它返回我期望的结果。
val a = Set("element is contained in set")
type Set = Int => Boolean
a.contains("element is
在阅读Scala源代码时,我在scala/package.scala中遇到了以下情况,我不太明白为什么我们同时需要trait和val。trait关键字将化名为类,那么为什么我们需要val?
type StringBuilder = scala.collection.mutable.StringBuilder
val StringBuilder = scala.collection.mutable.StringBuilder
// Numeric types which were moved into scala.math.*
type BigDecimal = scala.
我有一个需要根据用户输入创建类的用例。
例如,用户输入可以是:"(Int,fieldname1):(String,fieldname2):..“,则必须在运行时创建一个类,如下所示
Class Some
{
Int fieldname1
String fieldname2
..so..on..
}
这是Scala支持的吗?任何帮助都是非常感谢的。
我正在编写一个从Scanners扩展而来的类,它迫使我定义类型Token
object MyScanner extends Scanners {
type Token = ...
}
问题是我的令牌类本身称为Token
abstract class Token(...)
case class Literal(...)
...
在Scala中,是否可以将Scanners的类型Token定义为我的Token类?
type Token = Token显然不能工作。
我还尝试使用整个包名(以main.scala开头),如下所示:
type Token = main.scala....Token
这
我希望看到下一个push将进行的所有更改的列表。git status似乎知道我已经在本地提交了.我怎么能让它显示给我看是什么?我一直在做这样的事情:
% git status
# On branch master
# Your branch is ahead of 'origin/master' by 7 commits.
...
好的,上面说7提交。所以我知道
% git diff --name-status HEAD~7
M bin/bench
M scala/001/02.scala
M scala/007/01.scala
A
我正在尝试在Scala中使用自定义注释。在本例中,我创建了一个要用元数据注释的字符串(在本例中是另一个字符串)。然后,给出一个数据实例,我想要读取注释。
scala> case class named(name: String) extends scala.annotation.StaticAnnotation
defined class named
scala> @named("Greeting") val v = "Hello"
v: String = Hello
scala> def valueToName(x: String): S
如何比较两个Scala函数值是否相等。用例是,我有一个函数列表,该列表可以包含重复项,并且我只想执行每个函数一次。
如果我有:
scala> object A {
| def a {}
| }
defined module A
scala> val f1 = A.a _
f1: () => Unit = <function0>
scala> val f2 = A.a _
f2: () => Unit = <function0>
如果我尝试将该函数与==或eq进行比较,在这两种情况下都会得到false:
scala
我使用的是Scala2.10.3,我有以下测试代码(test.scala)不能工作:
case class Person (name: Name, age: Age)
sealed class Name (val value: String)
sealed class Age (val value: Int)
def foo (n: Name, a: Age): Person = new Person (n, a)
case class PersonBasic (name: String, age: Int)
def fooBasic (n: String, a: Int): PersonB
我有case类状态,并希望从它扩展变量类;但是在变量类中,只需要构造函数中的值。我可以把run函数放在哪里?
case class State[S, +A](run: S => (A, S)) {
//.....has `map` function
def map[B, X >: State[S, B]](f: A => B): X =
State(state => {
val (a, s2) = run(state)
(f(a), s2)
})
}
class Variable[+A](value: A) extends
我试图获取引用自定义类的属性的类型,我只知道它的类型为Object
我的代码:
class Edge[N <% Node](var from : N, var to : N) {
def toXml(c: Class): xml.Elem = {
<edge>{
for(field: Field <- classOf[this.type].getDeclaredFields)
yield <field name={field.name} tpe={field.tpe.toString()}>{ this.getCla
Scala“希望”我如何定义?在英语中,我们递归地定义s-expr,如下所示:“s-expr要么是原子,要么是s-exprs的列表。”你在Scala怎么说的?
我很确定这是错误的:
// Scala 2.11.2
trait Sexpr
case class Atom(text: String) extends Sexpr
type List[Sexpr] = Sexpr // To my amazement, the compiler accepts this!
val blah = Atom("blah")
def matchtest(sexpr: Sexpr):
我有两个文件,Vec3.scala和Main.scala。在Vec3.scala中,我定义了Vec3 case类,它实现了各种优秀操作符,如+、unary_-、点积等等。由于我将在我所从事的项目中同时使用颜色和点,所以我的C++本能要求我将别名Vec3键入为Color和Point3,如下所示:
// Vec3.scala
package vec3
final case class Vec3(x: Float, y: Float, z: Float) {
...math functions...
}
type Color = Vec3
type Point3 = Vec3
但是,当我试图
通过混合使用ObservableSet和HashSet创建了一个新类型,我希望能够替换新类型,然后能够使用新类型创建一个新实例,如下面的"foo“所示。但是这不能编译,尽管使用原始的长形式的类型似乎很好(如下面的"bar“所示)。
这只是语言的一个特性,还是我做了什么愚蠢的事情?
package whatever
import collection.mutable._
object Whatever {
type ObservableHashSet[T] = HashSet[T] with ObservableSet[T]
class X
def foo