我使用典型创建了一个项目play new,然后我用来play idea生成.iml文件.当我将.iml文件导入Intellij IDEA时,我无法弄清楚如何让编译器库识别.以下是一些截图:


请帮忙!
我已经声明了一个在应用程序启动时实例化的对象.我想在控制器内访问它,它是插件的一部分.我希望能够使用该插件,但我似乎无法超越第一部分 - 找到MyWebsocketConnection对象.这些例子都没有显示如何做到这一点.我不想注入控制器,因为我正在编写一个插件(我看到了如何在某处做的静态示例).
Global.scala,插件应用程序\ app\Global.scala
object Global extends GlobalSettings {
object MyWebsocketConnection {
val logger = // return something that gets instantiated once, like websocket object for logging to ui
}
class MyWebsocketConnection {
import MyWebsocketConnection.logger
}
override def onStart(app: Application) {
Logger.info("Application has started...");
}
}
Run Code Online (Sandbox Code Playgroud)
我的自定义日志插件控制器:
MyLogger.Scala,插件应用程序\ app\controllers\MyLogger.scala
object MyLogger {
def info(message: String) = {
// THIS CAN'T BE FOUND ?
// MyWebsocketConnection.logger.send(message)
}
}
Run Code Online (Sandbox Code Playgroud)
所以,从Play!2.0应用程序引用该插件,我会(可能)做类似下面的事情,但我甚至无法在此之前通过该部分:
MyFutureController.scala,另一个玩!application\app\controllers\MyFutureController.scala
object MyFutureController extends Controller { …Run Code Online (Sandbox Code Playgroud) 最近我注意到方差注释可以用在类型别名中.以下示例来自Predef:
type Function[-A, +B] = Function1[A, B]
Run Code Online (Sandbox Code Playgroud)
我开始思考,它可以在哪里使用.显然,您不能将方差更改为相反,或使不变类型表现为共变或逆变.编译器会抛出一个错误,就像这样
scala> type BrokenFunc[+T, -R] = Function1[T, R]
<console>:7: error: covariant type T occurs in contravariant position in type
[+T, -R]T => R of type BrokenFunc
Run Code Online (Sandbox Code Playgroud)
但是,你可以使一些变体类型的行为像不变量(至少,编译器不会与此争论).所以,我试着制作一个不变的版本List
scala> type InvList[T] = List[T]
defined type alias InvList
Run Code Online (Sandbox Code Playgroud)
但是这个新的不变量List仍然表现得像它的原始协变版本:
scala> val l: InvList[String] = List("foo")
l: InvList[String] = List(foo)
scala> val anyList: InvList[Any] = l
anyList: InvList[Any] = List(foo)
Run Code Online (Sandbox Code Playgroud)
那么,我错过了什么?类型别名中的方差注释的目的是什么?您能举例说明带有方差注释的类型别名,它与原始类型不同.
如何在Scala play 2.0模板中从String转换为long?
我想在以下操作中执行以下操作Application.profile(Long user_id):
<a href='@routes.Application.profile((Long) session.get("user_id"))'>@session.get("username")</a>
Run Code Online (Sandbox Code Playgroud) 我正在挖掘新的scala反射api,并且无法弄清楚为什么以下代码段不能按预期工作.给定层次结构(试图尽可能地简化):
import scala.reflect.runtime.universe._
trait TF[A] {
implicit def t: TypeTag[A]
def f[T <: A: TypeTag]: PartialFunction[Any, A] = {
case msg: T if typeOf[T] =:= typeOf[A] => msg
}
}
class TFilter[T: TypeTag] extends TF[T] {
def t = typeTag[T]
}
case class Foo(x: Int)
Run Code Online (Sandbox Code Playgroud)
我希望方法f过滤给定类型的对象.所以下面的片段应该返回Seq[Foo]
val messages = Seq(1, "hello", Foo(1))
val tFilter = new TFilter[Foo]
messages collect tFilter.f[Foo]
Run Code Online (Sandbox Code Playgroud)
它实际上会返回,Seq[Foo]但其他消息未经过滤,这听起来像一个错误.
res1: Seq[Foo] = List(1, hello, Foo(1))
Run Code Online (Sandbox Code Playgroud)
问题.我使用TypeTag错误还是新反射api的缺陷?
PS0.试过Scala 2.10.0-RC1 …
我们这里需要括号来调用匿名函数
user=> (-> [1 2 3 4] (conj 5) (#(map inc %)))
(2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)
为什么就没有必要加上括号map+,并fmap+在这些例子?
user=> (def map+ #(map inc %))
#'user/map+
user=> (-> [1 2 3 4] (conj 5) map+)
(2 3 4 5 6)
user=> (defn fmap+ [xs] (map inc xs))
#'user/fmap+
(-> [1 2 3 4] (conj 5) fmap+)
(2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud) 我现在正在深入阅读Scala.以下是本书的摘录:
所有与路径相关的类型都是类型投影.路径依赖类型由编译器
foo.Bar重写foo.type#Bar...在Scala中,所有类型引用都可以编写为针对命名实体的项目.scala.String类型是
scala.type#String名称scala引用包的位置的简写,scala类型String由Stringscala包上的类定义.
显然,没有scala.String课,但我没有重现这一点Null.
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
Run Code Online (Sandbox Code Playgroud)
所以,我的问题如下.路径依赖类型是否类型预测?它只是内部编译器表示还是可以用scala代码表示?
I am getting odd results from microbenchmarks that can be reproduced with the the example bench_xor_1000_ints from the Rust Book chapter on Benchmark tests.
The section Gotcha: optimizations gives general recommendations to return a value from the Bencher::iter closure and/or to use the black_box function. I ended up with these five variants:
#![feature(test)]
extern crate test;
use test::{Bencher, black_box};
fn xor(x: i32, y: i32) -> i32 { x ^ y }
#[bench] …Run Code Online (Sandbox Code Playgroud) 我在玩2.0模板系统上有点挣扎; 我有一个方法返回scala中的'Int',我想用"#,###"模式格式化它.
我曾尝试@order.itemCount().format("#,###")和@( order.item.count() format "#,###" ),但没有爱.
我不确定在播放模板语法中是否有一个技巧,或者我是否只需要学习如何在Scala中执行此操作.
我遇到了一个奇怪的scala-io moveTo方法问题.这是我的文件系统,tmp目录位于ram中.
~ % df -Th ~/ :) Filesystem Type Size Used Avail Use% Mounted on rootfs rootfs 112G 18G 89G 17% / /dev devtmpfs 3.9G 0 3.9G 0% /dev run tmpfs 3.9G 236K 3.9G 1% /run /dev/sda btrfs 112G 18G 89G 17% / shm tmpfs 3.9G 872K 3.9G 1% /dev/shm tmpfs tmpfs 3.9G 34M 3.9G 1% /tmp
将文件从tmp主目录移动到主目录或向后移动时,首先它的速度很慢(主观上约为1M/s,而iotop显示为1500M/s),其次是100%的CPU负载.在同一文件系统中移动文件时,一切都按预期工作.
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_03).
Type …Run Code Online (Sandbox Code Playgroud) scala ×8
sbt ×2
alias ×1
assembly ×1
benchmarking ×1
clojure ×1
global ×1
optimization ×1
projection ×1
reflection ×1
rust ×1
scala-2.10 ×1
templates ×1
tmpfs ×1
types ×1
variance ×1