我正在编写一个Java程序,它在文本文件中接受Scala程序,编译它(在Java中),然后运行它(也在Java中)。我想不出一个干净的方法来实现这一点。要编译,我尝试使用如下代码:
import scala.collection.JavaConversions;
import scala.tools.nsc.Global;
import scala.tools.nsc.Settings;
Global g = new Global(new Settings());
Global.Run run = g.new Run();
List<String> fileNames = new
使用twitter库:
val i: Int = new com.twitter.util.Eval()("1 + 1")
println(i)
印刷品2
val fun = new com.twitter.util.Eval()("object obj { def fun = {println(\"fun\")}; fun() }")
println(i)
原因例外:
Exception in thread "main" com.twitter.util.Eval$CompilerException: Compile
我想使用java agant将Scala应用程序(Kestrel,)与NewRelic集成,但由于出错而失败。
sh scripts/devel.sh
Starting kestrel in development mode...
Mar 28, 2013 18:15:15 +0800 NewRelic 1 INFO: Agent is using Logback
Mar 28, 2013 18:15:15 +0800 NewRelic 1 INFO: Loading configuration file "/tmp/newrelic.yml"
Mar 28, 2013
在Haskell中,我可以将参数约束为类型类,例如:
Prelude> f x y = x * y
Prelude> :t f
f :: Num a => a -> a -> a
我在Scala中也试图这样做,如下所示:
def sendMessage[A: Array[Byte], B: Array[Byte]](producer: Eval[KafkaProducer[A, B]])(pr: Eval[ProducerRecord[A, B]]) =
但是编译器抱怨:
[error] /home/developer/Desktop/scala/PurePr
第一次尝试使用准引号来泛化地生成新的案例类:
val universe: scala.reflect.runtime.universe.type = scala.reflect.runtime.universe
import universe._
import scala.reflect.runtime.{currentMirror => m}
import scala.tools.reflect.ToolBox
val toolbox = m.mkToolBox()
trait Father
class A extends Father {
println("I'
我正在尝试理解作用域在REPL中是如何工作的。我尝试遵循Joshua Suereth的书“depth.This中的Scala is on Windows XP,Java7和Scala2.9.1”的第5.1.1节。我在REPL中声明了一个类Dinner。绑定Dinner存在于本地作用域中。然后我实例化,因为它是本地绑定的。
scala> class Dinner {
| val veggie="broccoli"
| def announceDinner(veggie: String){
| println("Dinner happens to be tast
我是斯卡拉的新学习者。有一些问题我无法解决。我使用java反射检查用scala编写的方法(我在scala中找不到合适的方法),代码如下:
case class SomeClass(udf: UDF) {
// Get Method object of "eval" method in udf
val evalMethod: Method = {
var evalMethods: ListBuffer[Method] = new ListBuffer[Method]
udf.getClass.getMethods.foreach(m
我试着从另一个问题中学习一个例子,然后我发现了一些我无法解释的事情:
scala> import scala.reflect.runtime.{currentMirror => m}
import scala.reflect.runtime.{currentMirror=>m}
scala> m.mkToolBox()
<console>:12: error: value mkToolBox is not a member of reflect.runtime.universe.Mirror
m.mkToolBox()
这就是我想要的:
scala> var x:Int = 10
x: Int = 10
scala> var y:Int = 20
y: Int = 20
scala> val ret = q"return $x>$y"
ret: universe.Return = return 10.$greater(20)
scala> val result1 = toolbox.compile(ret)()
result1: Any = false
但问题是,我将在字符串var中获得表达式$x>$y,如下所示
scala> m
res20:
我有Haskell的背景,目前正在尝试熟悉Scala。
我在尝试将一种小型的、可扩展的表达式语言从Haskell转换为Scala时遇到了一些问题。编写既可使用新数据变体又可使用操作扩展的数据类型的基本问题通常称为。
我最初在Haskell中的解决方案使用了带约束的类型类和实例声明。我的表达式的基础定义如下:
module Expr where
class Expr e where
eval :: e -> Integer
data Lit = Lit Integer
instance Expr Lit where
eval (Lit l) = l
data Plus a b
我在我的一个项目中使用了sbt接口插件,运行时我得到了以下错误:
sbt docker:publishLocal
Joes-MacBook-Pro:my-projects joe$ sbt docker:publishLocal
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=724M; support was removed in 8.0
[info] Loading project definition from /Users/joe/projects/my-projects/proj1/pro
在Scala中可以实现以下功能:
scala> val l = List
l: scala.collection.immutable.List.type = scala.collection.immutable.List$@7960c21a
scala> l ( 1, 2, 3 )
res0: List[Int] = List(1, 2, 3)
换句话说,Scala具有更高阶的多态性。我想使用高阶多态性来做以下事情。
sealed abstract class A { def eval () : A }
case class A0 () extends A { ... }
cas
我花了几个小时研究一个话题。我绝对超出了我的能力范围。我想要的是以编程方式运行scala解释器,并能够从解释器中提取对象值。例如,如果我发送
val a = 1
val b = a + 1
我希望能够将b作为Int读出,而不仅仅是像这样打印出来的字符串
b = 2
源代码很密集。到目前为止,我还没有看到任何允许这种提取的部分。这里有没有专家能给我一个建议,或者告诉我这完全是胡说八道?
如何在会话之间将类型化对象从scala解释器中取出?
我正在编写一个Scala宏(Scala2.11),我想在其中使用inferImplicitValue获取表示宏内隐式变量的树,计算该语法树,并使用该值。我确实这样做过,但它似乎并不适用于所有的circumstances1。我构造了一个简单的例子,在那里它失败了。
// a class for implicit evidence
class DemoEvidence(val value: Int)
// define 'foo' method for invoking the macro
object demoModule {
def foo: Int = macro De
我将org.ddahl.rscala类导入我的Scala项目,并得到了这里找到的最小示例:要运行的。现在,如果可能的话,我想使用嵌入在Scala代码中的R库;但是,我无法找到从rscala包导入外部库所用的语法。
不支持从RClient对象调用,下面的内容无法工作:
val R = org.ddahl.rscala.RClient()
R.library("libraryname")
这是可以做的事情,还是将rscala的范围限制在scaladocs页面上列出的方法?
可能重复:
Subramaniam博士在他30岁以下的演讲中提到了Scala的功能风格,他给出了这个例子
class Car {
def turn(direction: String) = {
println("turning " + direction)
}
}
val car = new car
car turn "left"
然后他说,最后一行可以从数据文件中读取并进行评估。所以,数据变成代码,代码变成数据。
Scala是如何支持这一点的?它有eval函数吗?
在Scala2.9.x中,我直接使用tools.nsc.Global将某些字符串编译成类并执行它。
在scala 2.10中,可以将其替换为以下内容:
import scala.reflect.runtime._;
val cm = universe.runtimeMirror(getClass.getClassLoader)
import scala.tools.reflect.ToolBox;
val tb = cm.mkToolBox()
tb.eval(tb.parse("class C; new C"))
它工作得无懈可击。唯一的问题是,使用旧的(弃用的)方法,我可以
全部:
如何获取comment默认值的annotation对象?
import scala.annotation.StaticAnnotation
import scala.reflect.runtime._
import scala.reflect.runtime.universe._
// The annotation has default value
case class Table(idField: String = "") extends StaticAnnotation
@Table()
case class SomeEntity()
println(ge
我试图为接受case类值并在给定位置返回case类参数值的函数生成Tree。这对于提取私有参数的值非常有用。
import reflect.runtime.currentMirror
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox
val tb = currentMirror.mkToolBox()
case class A(private val first: Int)
case class B(first: Int, private val second: In