我有一个F-bounded类型,我的目标是创建一个类型参数化方法,以便能够重用它.这是示例代码:
trait FType {
type ThisType <: FType
def deepCopy(): ThisType
}
class ConcreteType extends FType {
override type ThisType = ConcreteType
override def deepCopy(): ConcreteType = this
}
class ConcreteType2 extends FType {
override type ThisType = ConcreteType2
override def deepCopy(): ConcreteType2 = this
}
object FType {
def deepCopy[T <: FType](_type: T): T = {
_type.deepCopy()
}
/* def deepCopy2(c: ConcreteType2): ConcreteType2 = {
c.deepCopy()
}*/
def main(args: Array[String]): Unit = {
//deepCopy2(new ConcreteType2)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,代码无法编译.编译器抛出此错误:
Error:(29, …Run Code Online (Sandbox Code Playgroud) 想象一下,我在 Scala 中有类 Imaginary(x) 和类 Real(y)。有没有办法做 ComplexNumber = 3 + 2i 而不是做 ComplexNumber = Real(3) + Imaginary(2) ?
谢谢。
我在scala语法中遇到了一些我认为是bug/no-syntax-sense的东西,但我更喜欢在报告之后将其发布在此处,因为我可能错了.
控制器类:
package some
import java.awt.event.ActionListener
import java.awt.event.ActionEvent
class ItemController extends ActionListener {
val NEW_ITEM = "new item"
val UPDATE_ITEM = "update item"
private val newItem = new ItemNew
override def actionPerformed(e: ActionEvent) = {
}
def create(view: String) = {
view match {
case NEW_ITEM => {
newItem eraseForm //Here eclipse says "Unit does not take parameters".
newItem setVisible true
}
case UPDATE_ITEM =>
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图类
package some
import scala.collection.mutable.HashMap
import javax.swing.JPanel
import java.awt.GridLayout
import javax.swing.JFrame
import …Run Code Online (Sandbox Code Playgroud) 我已经在Scala中实现了一个基本的可变树,我想以一种功能性的方式遍历它以便搜索元素,但是我不知道如何实现它。我还希望该算法尽可能地尾部递归。
树是具有值和也是树的叶子列表的结构。
任何帮助,将不胜感激。
这是我的代码(专注于getOpt方法):
package main
import scala.collection.mutable.ListBuffer
sealed trait Tree[Node] {
val node: Node
val parent: Option[Tree[Node]]
val children: ListBuffer[Tree[Node]]
def add(n: Node): Tree[Node]
def size: Int
def getOpt(p: (Node) => Boolean): Option[Tree[Node]]
override def toString = {
s"""[$node${if (children.isEmpty) "" else s", Children: $children"}]"""
}
}
case class ConcreteTree(override val node: Int) extends Tree[Int] {
override val children = ListBuffer[Tree[Int]]()
override val parent: Option[Tree[Int]] = None
override def add(n: Int): ConcreteTree = {
val newNode = new ConcreteTree(n) …Run Code Online (Sandbox Code Playgroud)