Scala导入有问题.我有两个类的导入问题.第一个:
package org.world
import org.gui.tokens.Token
object WorldObject {
}
abstract class WorldObject[A <: WorldObject[_]](var xPos: Float, var yPos: Float) {
def x = xPos
def y = yPos
def token: Token
^^^^^
def move(dx: Float, dy: Float) {// : A = new A(x + dx, y + dy)
xPos += dx // = x + dx
yPos += dy
}
}
Run Code Online (Sandbox Code Playgroud)
第二个:
package org.gui.tokens
object Token {
}
Run Code Online (Sandbox Code Playgroud)
问题是返回类型def token: Token以红色加下划线,并带有错误说明
找不到:键入令牌
所有课程都很好.其他课程没有类似的问题.我不记得Java中的这种情况,autoimport总能完美运行.这里只是import org.gui.tokens.Token一遍WorldObject又一遍地在文件中重复添加语句......为什么会这样?我能做些什么呢?
我们假设我们有以下两个类:
abstract case class MyParent(param: Int) {
// ...
}
case class MyChild(param: Int) extends MyParent(param: Int) {
// ... ^^^^^ ^^^^^
}
Run Code Online (Sandbox Code Playgroud)
使它们成为案例类导致两个param使用位置都出错,这表示它需要override修改器来覆盖父类的值.这对我来说很奇怪..为什么我必须在这里发明其他的param名称..为什么这个事情的顺序是强制执行的?利润在哪里?
为什么我有:
trait T {
def method(a: Int)
}
class A extends T {
//...
}
class B extends A {
//...
}
Run Code Online (Sandbox Code Playgroud)
那时当我这样做:
//...
val b = new B
b.method(15)
//...
Run Code Online (Sandbox Code Playgroud)
将method()被认为是未定义对于B?为什么我必须明确说出来
class B extends A with T
Run Code Online (Sandbox Code Playgroud)
为了获得我想要的东西?是不是继承了父类的特征?如果他们可以实现父母自己定义的方法的很大一部分,怎么会这样呢?如果是这样,那么论证是什么?
我有以下代码:
trait DBO
trait BSONWriter[S]
trait HasWriter {
implicit def writer[T <: BSONWriter[_ <: DBO]]: T
}
Run Code Online (Sandbox Code Playgroud)
一切都很好!除了当我把它混合到我的时候objects,map所有集合的方法以及隐含CanBuildFrom在所有这些对象及其伴随类中使用的其他东西现在显示错误消息,如:
- 模糊隐含值:特征中的方法编写器保存类型[T <:reactivemongo.bson.handlers.BSONWriter [_ <traits.DBO]] => T和方法canBuildFrom在类型为[A] => scala的对象缓冲区中. collection.generic.CanBuildFrom [scala.collection.mutable.Buffer.Coll,A,scala.collection.mutable.Buffer [A]]匹配预期类型scala.collection.generic.CanBuildFrom [scala.collection.mutable.Buffer [models. world.Star],traits.IsInWorld with org.bundlelib.traits.Groupable {def asBSON:reactivemongo.bson.AppendableBSONDocument},That]
现在我不明白,为什么?混淆隐式方法的签名是不同的!我该如何防止这种情况?
在Play 2.0中,使用Scala,我想创建一个带有html片段并将每一行放入<div>块中的工厂.我已经尝试了几种我能想到的方法,但它总是出现在String/Html的类型错误或者在页面上写入html代码,就好像它是文本一样.有谁知道如何做到这一点?
更新:
我希望看到的是这样的:
@factories.f_div_lines {
<a href="/aabbcc"> abc </a>
<a href="/ccbbdd"> cbd </a>
<a href="/bbddee"> bde </a>
<a href="/ddeeff"> def </a>
<a href="/eeffgg"> efg </a>
}
Run Code Online (Sandbox Code Playgroud)
并且所有<a href>标签都被<div>'s 包围
将函数作为参数传递给类构造函数时如何避免闭包?
我的类构造函数接受一个类型的函数() => Unit.在程序工作过程中,我想从一个可变映射中访问一个键值对,这个映射在使用构造函数创建对象时没有定义
val cats = scala.collection.mutable.Map[String, Cat]
class Trigger(period: Long, f: () => Unit) {
//pseudocode:
when period passes, f()
}
someWonderfulObject += new Trigger (1000, () => cats("Hershy").meow)
cats += ("Hershy" -> Cat())
Run Code Online (Sandbox Code Playgroud)
然后,当奇妙的物体触发它的触发器时,我得到的错误是没有像"Hershy"那样的键.我的结论是,显然,这是由于在没有"Hershy"的状态下f传递给Triggercons被关闭.
我现在的问题是 - 如何避免Scala在这里使用闭包而是看看实际的状态cats?
更新:
"当期间通过"的代码是这样的:
def update(tpf: Float) {
timePassed += tpf
if(timePassed > period) f()
}
Run Code Online (Sandbox Code Playgroud)
该tpf值来自上面,所以在这里这一切似乎确定.
更新:
我发现问题出在另一个完全无关的地方,我把所有这些东西的容器弄糊涂了.然而,谢谢大家,我从答案中学到了一些东西.
据我所知,该isDefinedAt方法应该像类型contains方法一样工作.但奇怪的是,它的行为有所不同 - 它不会检查重复出现的元素.
val randomizer = new Random
def next(acc: List[Int], n: Int): List[Int] = {
if(n > 0) {
val r = randomizer.nextInt(15)
println("generating, r=" + r + " is defined=" + acc.isDefinedAt(r))
if(!acc.isDefinedAt(r)) next(r :: acc, n - 1) // check for NO coincidence
else next(acc, n)
} else acc
}
println("indices = " + next(List[Int](), 6))
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用Sets而不是列表,但是,为什么它会像这样?
我得到的输出就像
generating, r=8 is defined=false
generating, r=13 is defined=false
generating, r=2 is defined=false
generating, r=8 is …Run Code Online (Sandbox Code Playgroud) 我有以下CoffeeScript代码:
planet = new Planet p5, {x: 100, y: 100, diameter: 20}
Run Code Online (Sandbox Code Playgroud)
和其他地方:
class GameObject
constructor: (@p5, @x, @y) ->
@selected = false
class Planet extends GameObject
constructor: (p5, opts) ->
super (p5 opts.x opts.y)
@diameter = opts.diameter
Run Code Online (Sandbox Code Playgroud)
而对于super它说的线:
未捕获的TypeError:对象#<Object>的属性"x"不是函数
当它只是:它是好的:
class Planet
constructor: (p5, opts) ->
@x = opts.x
@y = opts.y
@diameter = opts.diameter
@selected = false
Run Code Online (Sandbox Code Playgroud)
即在让它成为一个更通用的孩子之前GameObject...我已经尝试了一些重新安排以使其工作,但所有都保留.不确定它是否与CoffeeScript或JavaScript有关.官方网站上的"尝试CoffeScript"事情在这里没有发现任何错误.浏览器是Chrome ...这里有什么问题,我该如何克服这个问题?
scala ×7
case-class ×1
class ×1
closures ×1
coffeescript ×1
implicit ×1
import ×1
inheritance ×1
javascript ×1
list ×1
parameters ×1
types ×1