有人可以解释type关键字和#运算符在scala中的工作方式以及如何使用它吗?请看一些例子.
//Example1
scala> type t1 = Option.type
defined type alias t1
//Shouldn't this work since previous example simply works?
scala> type t2 = String.type
<console>:7: error: type mismatch;
found : String.type
required: AnyRef
type t2 = String.type
^
//lets define custom trait T
scala> trait T
defined trait T
//... and obtain it's type like in Example1.
//Shouldn't this work since previous Example1 simply works?
scala> type t3 = T.type
<console>:7: error: not found: value T …Run Code Online (Sandbox Code Playgroud) 我希望能够在特定目录中运行java程序.我认为,参数化工作目录非常方便,因为它允许轻松管理配置.
例如,在一个文件夹中,您可以配置测试,在另一个文件夹中,您可以拥有生产所需的资源.您可能认为,可以选择操作类路径以包含/排除资源,但只有当您对存储在类路径中并使用它们引用它们的资源感兴趣时,此类解决方案才有效Classloader.getResource(r).但是,如果您有一些外部配置并且想要使用简单的指令来访问它,该File file = new File("app.properties");怎么办?
让我们看看普通的例子.
您的应用程序使用app.properties文件,您可以在其中存储外部服务的凭据.应用程序在工作目录中查找此文件,因为您使用提到的File file = new File("app.properties");指令来访问它.在测试中,您希望使用特定于测试的app.properties.在集成测试中,您希望使用特定于其他环境的app.properties.最后,当您构建和发布应用程序时,您希望提供其他app.properties文件.通过键入File file = new File("app.properties");而不是(伪代码),您想要访问的所有这些资源总是以相同的方式访问:
if(configTest)
file = File("testWorkDir/app.properties");
else if(config2)
file = File("config2WorkDir/app.properties");
else
file = File("app.properties");
Run Code Online (Sandbox Code Playgroud)
或者不使用类路径中的资源
this.getClass.getClassLoader.getResource("app.properties");
Run Code Online (Sandbox Code Playgroud)
当然,你是聪明的程序员,你使用构建工具,如maven,gradle或sbt :)
一开始就应该这样做.至少问题:
有没有办法在java中设置工作目录,如果是的话如何在构建工具中配置它(特别是在sbt中)?
附加信息:
new java.io.File(".").getAbsolutePath.有人可以解释现实世界的例子如何在下面的方法工作scalaz.Validation?我的意思是loopSuccess和loopFailure.
来自源代码的片段(scalaz7):
scalaz.Validation:
/** Spin in tail-position on the success value of this validation. */
def loopSuccess[EE >: E, AA >: A, X](success: AA => X \/ Validation[EE, AA], failure: EE => X): X =
Validation.loopSuccess(this, success, failure)
/** Spin in tail-position on the failure value of this validation. */
def loopFailure[EE >: E, AA >: A, X](success: AA => X, failure: EE => X \/ Validation[EE, AA]): X =
Validation.loopFailure(this, success, failure)
Run Code Online (Sandbox Code Playgroud)
伴随对象: …
如何解决这种类型的定义:Pure[({type ?[a]=(R, a)})#?]?
使用这种结构的原因是什么?
Snipped来自scalaz库:
trait Pure[P[_]] {
def pure[A](a: => A): P[A]
}
object Pure {
import Scalaz._
//...
implicit def Tuple2Pure[R: Zero]: Pure[({type ?[a]=(R, a)})#?] = new Pure[({type ?[a]=(R, a)})#?] {
def pure[A](a: => A) = (Ø, a)
}
//...
}
Run Code Online (Sandbox Code Playgroud) 在SBT(我使用0.13.0)中,有一个sbt.IO对象提供了一些有用的方法.例如,可以从互联网上下载文件,如下所示:
sbt.IO.download(new URL(...), file(...)) //my program freezes until end of this method
Run Code Online (Sandbox Code Playgroud)
我正在写一个sbt插件,想从互联网上下载一些文件.我想在下载过程中以某种方式显示进度条.这将很好地通知用户程序仍然可以显示他的一些信息.
你会怎么做?
scala中是否(或将在最近的特征中)可以创建具有命名参数的case类?我的意思是在构造函数中使用命名参数构造case类对象.
我的案例类有很多字段.具有许多未命名参数的构造函数容易出错.
我想得到(目前不工作的例子):
case class X(x0:String, x1:Int, x2:String)
val x = X(x0="Xstring", x1=12, x2="x2String")
Run Code Online (Sandbox Code Playgroud)
作为解决方法,我们可以提供工厂方法,如下面摘录节目,但这是丑陋的解决方案:
case class X(x0:String, x1:Int, x2:String)
object X {
private nullX = X(null, null, null)
def createX = nullX.copy _
}
val x = X.createX(x0="Xstring", x1=12, x2="x2String")
Run Code Online (Sandbox Code Playgroud)
有线索吗?:)
编辑:这是intellij想法scala插件中的一些旧版本的错误.Plase不再投票;)
我正在寻找Groovy AST转换,它将在我的类中生成构建器模式代码.
我知道有类似@Canonnical或@ToString或@EqualsAndHashCode增强自动生成有用的方法,并希望是否会有@GenerateBuilder.我想用它这样的东西:
//Groovy code:
@GenerateBuilder
@CompileStatic
class Person {
String name
int age
Long id
String createdBy
}
//then in Java code:
Person p = Person.newBuilder()
.withName("pawel")
.withAge(19)
.withId(11123)
.withCreatedBy("system")
.build();
Run Code Online (Sandbox Code Playgroud) 有人可以解释并提供with在定义类型时使用关键字的真实世界示例吗?
我们来定义类型
type T = A with B
Run Code Online (Sandbox Code Playgroud)
这是什么意思?什么时候应该使用?如何实例化类型T?
给定签名功能:A => F[G[B]].有monad实例F和G类型.
是否可以将其转换为具有签名的内容:F[G[A=>B]?这种转变有没有通用名称?
换句话说,实施prettify2什么?
def pretiffy(x: String): Future[Option[String]] = Future{if(x == "") None else Some(s">>>$x<<<")}
val pretiffy2: Future[Option[String => String]] = ???
Run Code Online (Sandbox Code Playgroud)
更新:我很欣赏使用猫或scalaz的答案.
当我使用Scalaz进行编码时,我经常遇到问题,范围内没有隐含的内容.我认为在大量的软件包scalaz中应该存在一些默认的含义,但要么我不知道哪里有没有.
假设我们想要show任何Anyscalaz(我使用scalaz 7):
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> {def a: Any = "sratatata"; a}.show
<console>:14: error: could not find implicit value for parameter F0: scalaz.Show[Any]
{def a: Any = "sratatata"; a}.show
^
Run Code Online (Sandbox Code Playgroud)
这是行不通的Show[Any],因为范围没有隐含.
为什么Scalaz不提供它?使用某些全球性的好方法是Show[A]什么?我的意思是这样的:
scala> implicit def anyShow[A] = Show.showFromToString[A]
anyShow: [A]=> scalaz.Show[A]
scala> {def a: Any = "sratatata"; a}.show
res0: scalaz.Cord = sratatata
Run Code Online (Sandbox Code Playgroud)
我觉得同样的感觉Equal.
编辑
我已经尝试在添加的答案中提到,import scalaz.syntax.ShowSyntax但这并不能解决我的问题.看到:
scala> import scalaz._
import …Run Code Online (Sandbox Code Playgroud) 下划线中的下划线意味着什么.这是scalaz7库的片段:
trait Apply[F[_]] extends Functor[F] { self =>
//...
def ap[A, B](fa: => F[A])(f: => F[A => B]): F[B]
//...
def apF[A, B](f: => F[A => B]): F[A] => F[B] = ap(_)(f) // <----HERE
//...
}
Run Code Online (Sandbox Code Playgroud)
使用它的一般规则是什么?