我正在努力寻找任何适当的链接来设计模式,最佳实践或良好的基本架构原则,这些原则应该用于构建基于Actor的应用程序.我知道的那几个是:
如您所知,SBT以某种方式与Maven兼容 - SBT识别简单的Maven POM,并且可以使用其中指定的依赖项和存储库.但是,SBT wiki说,如果在SBT项目定义中指定了内联依赖项,POM将被忽略(因此在这种情况下使用两者都是不可能的):
当存在内联依赖性声明时,将忽略Maven和Ivy配置(pom.xml和ivy.xml).
有谁知道,如果存在从Maven POM到SBT项目定义的任何转换器(将POM的XML转换为项目定义Scala代码)?我正在考虑编写这样的脚本(这将有助于将我的旧Scala/Maven项目迁移到SBT),但是首先想知道这个功能是否已经存在.
在将现有Java代码库逐步迁移到Scala时,需要注意哪些最重要的要点和解决方法?具有(可能非常长)的中间阶段,其中两种语言都在使用中.
我正在考虑的事情是:
Scala的Option类有一个orNull
方法,其签名如下所示.
orNull [A1 >: A](implicit ev : <:<[Null, A1]) : A1
Run Code Online (Sandbox Code Playgroud)
我被隐含的东西弄糊涂了.有人请说明如何使用它,理想情况下是一个例子吗?
有没有人知道Scala中是否有类似的东西:
case class Thing(property:String)
def f(thing:Thing, prop:String = thing.property) = println(prop)
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译; 给错误error: not found: value thing
的thing.property
以下显示了预期的行为:
f(Thing("abc"), "123") // prints "123"
f(Thing("abc")) // prints "abc"
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使prop
参数成为一个Option[String]
并在函数定义中进行检查,但我想知道是否有一种方法可以使用2.8.0中的新命名/默认参数支持.
在阅读Wouter Swierstra撰写的文章"数据类型单点"时,我一直坚持将以下Haskell代码翻译成Scala:
data Expr f = In (f (Expr f ))
Run Code Online (Sandbox Code Playgroud)
Expr
是用于表示算术表达式的数据类型,具体表达式的编写方式如下:
data Val e = Val Int
type IntExpr = Expr Val
data Add e = Add e e
type AddExpr = Expr Add
Run Code Online (Sandbox Code Playgroud)
我的问题是在Scala 中实现f
(可能被认为是构造函数的签名).
PS定义两个签名的副产品,稍后您可以组合数据类型,获得类型的表达式Expr (Val :+: Add )
:
data (f :+: g) e = Inl (f e) | Inr (g e)
addExample :: Expr (Val :+: Add )
addExample = In (Inr (Add (In …
Run Code Online (Sandbox Code Playgroud) 有没有办法强制Scala解释器(通过SBT启动)打印完整的堆栈跟踪.默认情况下,显示少于10行:
scala> new CacheMonitoringClient
javax.management.InstanceNotFoundException: com.bea:Name=DomainRuntimeService,Type=weblogic.management.beanservers.domainrun
time.DomainRuntimeServiceMBean
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:195)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:224)
at javax.management.remote.rmi.RMIConnectionImpl_921_WLStub.getAttribute(Unknown Source)
at weblogic.management.remote.common.RMIConnectionWrapper$11.run(ClientProviderBase.java:498)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.security.Security.runAs(Security.java:61)
at weblogic.management.remote.common.RMIConnectionWrapper.getAttribute(ClientProviderBas...
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我正在使用try { new CacheMonitoringClient } catch { case ex => ex.printStackTrace}
(显式包装抛出我感兴趣的异常的调用),但那真的很丑......
在观看了Rich Hickey对Clojure 1.2 协议的采访,并且对Clojure知之甚少之后,我对Clojure协议提出了一些问题:
SBT 0.11似乎缺少码头和码头命令.无论是那个还是我做错了什么.我只是在运行sbt,然后尝试运行jetty-run.我在src/main/webapp/WEB-INF/web.xml中定义了一个web.xml文件,其中包含以下信息:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"> </web-app>
Run Code Online (Sandbox Code Playgroud)
我只是尝试使用最新的SBT部署一个空白的网络应用程序.我找不到任何文档或更新的示例.有任何想法吗?
先感谢您.
我在Java中有以下代码:
public class JavaClass {
public static void method( Object x ) {
}
public static void varargsMethod( Object... x ) {
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从Scala访问它时,
object FooUser {
JavaClass.method(true)
JavaClass.varargsMethod(true) // <-- compile error
}
Run Code Online (Sandbox Code Playgroud)
我得到以下编译错误:
类型不匹配; found:Boolean(true)required:java.lang.Object注意:基本类型不会隐式转换为AnyRef.你可以通过施放x.asInstanceOf [AnyRef]来安全地强制拳击
错误消息是非常有用的,并显示如何修复错误,但我想知道为什么编译器(显然)很乐意隐式转换scala.Boolean
一个方法调用而不是另一个.这是一个错误还是故意的?
更新以添加: 我正在使用Scala 2.8.如果我制作varargsMethod签名
public static <T> void varargsMethod(T... xs) {
Run Code Online (Sandbox Code Playgroud)
相反,那么错误也会消失.我仍然感到困惑,为什么编译器无法搞清楚.