我想将我的应用程序作为一个自包含的jar文件发送.jar文件应包含所有类文件,以及两个共享库.其中一个共享库是为JNI编写的,实质上是另一个共享库(100%C).
我首先尝试运行没有库的jar文件,但可以通过LD_LIBRARY_PATH环境变量访问它们.这工作得很好.
然后我将JNI库放入jar文件中.我已经阅读过从jar文件中加载库,首先将它们复制到一些临时目录,这对我来说效果很好(请注意,100%C库,我想,像以前一样加载).
现在我想将两个库放入jar中,但我不明白如何确保它们都被加载.当然我可以将它们都复制到一个临时目录,但当我加载"间接"时,它总是给我:
java.lang.UnsatisfiedLinkError:/tmp/.../libindirect.so:/libpure.so:无法打开共享对象文件:没有这样的文件或目录
我试图通过在其临时文件上明确地调用System.load(...)来强制JVM加载"100%C"库,但这样做效果不佳.我怀疑系统在解析libindirect.so中的链接时正在寻找它,但不关心JVM加载了什么.
那个人可以帮助我吗?
谢谢
在下面的代码示例中,我不明白为什么函数fun可以作为参数传递给方法addAction.该方法fun属于类型Unit,而该方法addAction需要类型的函数() => Unit.
如果fun是类型() => Unit,那么当我尝试添加到操作列表时,为什么编译器会抱怨fun类型?Unitfunactions = fun :: actions
package myscala
object MyScala {
def fun() { println("fun1 executed.") }
def addAction(a: () => Unit) {
actions = a :: actions
}
var actions: List[() => Unit] = List()
def main(args: Array[String]) {
// the following line would produce a compiler error (found: Unit, required: () => Unit), it's OK …Run Code Online (Sandbox Code Playgroud) 无论是使用的JLine(或JLine2),是有可能发出一个电话readline上ConsoleReader,并有中,除了标准的提示,缓冲区预填充我选择的字符串?
我试过这样做,例如:
reader.getCursorBuffer().write("Default");
reader.readLine("Prompt> ");
Run Code Online (Sandbox Code Playgroud)
这似乎确实写入缓冲区,但该行只显示提示.如果我按回车键,就会按照我的预期readLine返回"Default".如果我清除屏幕,则会重新绘制缓冲区并正确显示.
我的理解是,reader.redrawLine()在打电话之后我应该以某种方式打电话readLine.然而,最后一个是阻塞,这使得它很难(不是不可能,但使用第二个线程肯定是错误的).
我需要一个表示一组序列(所有相同,已知,长度)的数据结构,具有以下非标准操作:
在集合中找到两个恰好在一个索引上不同的序列.(或确定不存在这样的对.)
如果N是序列的长度和序列M的数量,则有一个明显的O(N*M*M)算法.我想知道是否有一种更有效地解决这个问题的标准方法.如果需要,我愿意应用预处理.
奖励点如果不是返回一对,则算法返回在同一点上不同的所有序列.
或者,我也对一个解决方案感兴趣,我可以有效地检查特定序列在一个索引处是否与该集合中的任何序列不同.如果它有帮助,我们可以假设在集合中,没有两个序列具有该属性.
编辑:你可以假设N相当小.通过这个,我的意思是改进,例如O(log(N)*M*M)对我的用例不是立即有用.
我有一个文件中的JavaScript元组列表,每行一个,如下:
{ x : 12, y : -1.0, as : [ 2, 0, 0 ], str : "xxx", d : 0.041 },
{ x : 27, y : 11.4, as : [ 1, 1, 7 ], str : "yyy", d : 0.235 },
{ x : -4, y : 2.0, as : [ 7, 8, 3 ], str : "zzz", d : 0.002 },
{ x : 44, y : 5.4, as : [ 9, 4, 6 ], str : …Run Code Online (Sandbox Code Playgroud) 这是我一再遇到的设计问题.假设您正在构建编译器,如何在树中存储类型?
举一个简单Expr和Type层次,并假设Plus和Equals多态(加上在短短布尔值||,例如).
trait Type
case object BoolType extends Type
case object IntType extends Type
case object Untyped extends Type
trait Expr { var tpe : Type = Untyped }
case class Var(id : String) extends Expr
case class Plus(l : Expr, r : Expr) extends Expr
case class Equals(l : Expr, r : Expr) extends Expr
// ...
Run Code Online (Sandbox Code Playgroud)
进一步假设我在构造表达式树时不知道标识符的类型,因此无法通过构造知道类型.现在典型的类型检查功能可能如下所示:
def typeCheck(env : Map[String,Type])(expr : Expr) : Expr = expr match …Run Code Online (Sandbox Code Playgroud) 我用SBT 0.11.2创建了一个Scala/Java混合项目.我的JUnit测试配置是
resolvers += "twitter.com" at "http://maven.twttr.com/"
seq(com.github.retronym.SbtOneJar.oneJarSettings: _*)
libraryDependencies += "com.novocode" % "junit-interface" % "0.10-M2" % "test"
Run Code Online (Sandbox Code Playgroud)
当我在Scala中编写JUnit测试用例时@Test,一切顺利.但是当我编写Java JUnit测试用例,然后test在sbt中运行时,Java JUnit测试无法重新编译.仅执行用Scala编写的测试用例.
如何让sbt同时识别我的Java和Scala测试用例?
在学习你Haskell的教程有一个例子使用let列表中理解粘结剂:
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2, bmi >= 25.0]
Run Code Online (Sandbox Code Playgroud)
该函数采用高度/重量对列表,并返回超出某个限制的相应体质量指数列表,例如:
ghci> calcBmis [(70, 1.85), (50, 2.00), (130, 1.62)]
[49.53513183965858]
Run Code Online (Sandbox Code Playgroud)
这里有趣的是,bmi理解中绑定的值既可以用于保护,也可以用在结果表达式中.我知道如何在Scala中执行类似操作的唯一方法是编写:
def calcBmis(xs : Seq[(Double,Double)]) =
for((w,h) <- xs ; bmi <- Some(w / (h*h)) if bmi >= 25.0) yield bmi
Run Code Online (Sandbox Code Playgroud)
不得不把我的价值包裹在Some这里感觉不对.谁知道更好的方法?
我刚刚开始阅读有关scala的教程并且遇到了阻塞.我已经将几个示例合并在一起并且收到错误,但不知道为什么.
import java.text.DateFormat._
import java.util.{Date, Locale}
object FrenchDate {
def main(args: Array[String]) {
timer(println(frenchDate))
}
def frenchDate():String = {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
df format now
}
def timer(callback: () => Unit) {
while(true) {callback(); Thread sleep 1000}
}
}
Run Code Online (Sandbox Code Playgroud)
带来错误
error: type mismatch;
found : Unit
required: () => Unit
println(frenchDate)
Run Code Online (Sandbox Code Playgroud)
而以下工作
import java.text.DateFormat._
import java.util.{Date, Locale}
object FrenchDate {
def main(args: Array[String]) {
timer(frenchDate)
}
def frenchDate() {
val now = new …Run Code Online (Sandbox Code Playgroud) 这一切都在标题中.
相位的问题的另一种方法是:在bash,什么是检查字符串是否是40(或32)中的人物的范围序列的简洁的方式[0-9]和[a-f]?
为了收集有关Git存储库的一些统计信息,我正在寻找一种方法来执行以下操作:
du -h).一个以准Bash表示的应用程序将运行
echo $HASH $TIME `du -hs --exclude=".git" . | awk '{ print $1; }'` >> ../sizeovertime
Run Code Online (Sandbox Code Playgroud)
在所有提交中了解存储库的增长.
(不知何故,感觉应该可以使用git filter-branch --tree-filter它,但这对我来说看起来像是一个可怕的黑客.)
我正在尝试编写一个递归程序,用于将int与列表中的每个值进行比较.问题是我一直收到无法访问的错误,我真的不知道为什么.我的代码是
def isIn(x : Int, l : List[Int]) : Boolean = l match {
case Nil => false
case x => true
case h :: t => isIn(x, t)
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么这不起作用.或者我想,我想知道如何将x与头部用例进行比较.
val total_breaks = //a random number
total_breaks match {
case i if(i < 0) => chartTemplate.setAttribute("totalBreaks", 0)
case _ => chartTemplate.setAttribute("totalBreaks", total_breaks)
}
Run Code Online (Sandbox Code Playgroud)
我在想Scala中有一个函数可以缩短它.我以为min这样做但我猜不是.我似乎无法找到文件min,max等等.
有点像total_breaks.min(0).如果不在0,则显示0如果不显示total_breaks.
也有办法做这样的事情
(4 + 5) match {
case 0 => println("test")
case _ => println(_) //i need to display the number passed into match? Is this not possible?
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做case i => println(i)是一样的case _ =>?这是后备吗?