我在Clojure -main中的:gen-class :main true命名空间中定义了一个函数.我试图从REPL测试它.
我的main功能看起来像这样:
(defn -main [& args]
; ...
)
Run Code Online (Sandbox Code Playgroud)
我试图与调用它(ns/-main "-x" "foo"),(ns/-main "-x foo"),(ns/-main ["-x" "foo"]),(ns/-main (into-array String ["-x" "foo"]),等,以及所有给我的各种错误.
如何从REPL调用此函数并传入一些命令行参数来测试它?
谢谢.
我有一个使用Maven2的Java项目.能够获得可以访问已编译应用程序的完整类路径和所有库的REPL非常有用.在SBT中,对于纯Scala和混合Scala/Java项目来说这是微不足道的:我跑了sbt console.
但它对纯Java项目也非常有用.我并不担心什么语言:显然,Scala对此非常好,就像BeanShell一样,但是JRuby或者Jython或者Rhino或者Clojure也会很好地完成这项工作.基本上我希望能够以交互方式戳戳和刺激物体.
在没有BeanShell或Scala或任何添加为运行时/编译时依赖项的情况下,在Maven项目中设置REPL的最简单方法是什么?
我使用Scala 2.9.1.我有一个简单的scala"解释器":
import scala.tools.nsc.interpreter.IMain
import scala.tools.nsc.interpreter.Results.Result
import scala.tools.nsc.interpreter.Results.Success
object App {
def main(args: Array[String]) {
val interpreter = new IMain
val result:Result = interpreter.interpret(args(0))
result.toString() match {
case "Success" =>
{
var success = result.asInstanceOf[Success]
println(success.productElement(0))
};
case _ => println("very bad result");
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它(maven)时,我得到:
[ERROR] /home/koziolek/workspace/dsi/src/main/scala/pl/koziolekweb/scala/dsi/App.scala:15: error: not found: type Success
[INFO] var success = result.asInstanceOf[Success]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,编译器表示没有类型Success,尽管我导入了它.
FileNotFoundException在尝试使用外部库时,我在Clojure REPL中收到.例如,我创建了一个新项目lein new example-twitter-project.然后我编辑文件:
project.clj:
(defproject example-twitter-project "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.3.0"]
[clojure-twitter "1.2.6-SNAPSHOT"]])
Run Code Online (Sandbox Code Playgroud)
src/example-twitter-project/core.clj:
(ns example-twitter-project.core
(:use 'twitter))
Run Code Online (Sandbox Code Playgroud)
然后我跑lein deps,然后lein repl.
example-twitter-project$ lein repl
REPL started; server listening on localhost port 23833
user=> (use :reload-all 'example-twitter-project.core)
FileNotFoundException Could not locate quote/twitter__init.class or quote/twitter.clj on classpath: clojure.lang.RT.load (RT.java:430)
Run Code Online (Sandbox Code Playgroud)
同时,我可以use直接从REPL中获取外部库:
user=> (use 'twitter)
nil
user=> (doc twitter/with-oauth)
-------------------------
twitter/with-oauth
([consumer access-token access-token-secret & body])
Macro
Set the …Run Code Online (Sandbox Code Playgroud) 我知道Common Lisp REPL提供的强大功能.我特意使用SBCL实现.但是,我不确定我的REPL设置是否正确,并且想知道如何从REPL中获得更多功能.
例如,我想找到计算机2 ^ 3 = 8的幂函数.这被称为pow或power许多其他语言.所以我做了:
CL-USER> (apropos 'pow)
POW
POWER
:OP-POWER-EXT (bound)
:POWERPC (bound)
SB-IMPL::*INTEGER-READER-BASE-POWER* (bound)
SB-IMPL::*POWER-CACHE* (bound)
SB-IMPL::+POWER-CACHE-INTEGER-LENGTH-LIMIT+ (bound)
SB-IMPL::COMPUTE-POWERS
SB-IMPL::POWER
SB-IMPL::POWERS-FOR-BASE (fbound)
SB-INT:POWER-OF-TWO-CEILING (fbound)
SB-KERNEL:%POW (fbound)
SB-KERNEL::POWER
SB-KERNEL:SCRUB-POWER-CACHE (fbound)
; No value
Run Code Online (Sandbox Code Playgroud)
我如何查看任何这些功能的文档?在查看文档之前,我是否必须"导入"这些"库"?通常我发现文档丢失了,因为REPL将返回nil.文档在哪里?比如我做了:
CL-USER> (documentation 'power 'function)
Run Code Online (Sandbox Code Playgroud)
它刚刚返回,NIL但正如你从上面给出的列表中看到的那样apropos,power存在!
总结:
SB-IMPL和SB-KERNEL已导入的库?感谢您的帮助!
我的理解是python将打印repr输出,但显然并非总是如此.例如:
在ipython中:
In [1]: type([])
Out[1]: list
In [2]: set([3,1,2])
Out[2]: {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
在python中:
>>> type([])
<type 'list'>
>>> set([3,1,2])
set([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
ipython在输出上应用了哪些转换?
我想创建一个显示列表最后一个元素的函数.这是我的代码:
ghci> let myLast :: [a] -> a
ghci> let myLast [] = error
ghci> let myLast [x] = x
ghci> let myLast (x:xs) = myLast xs
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Run Code Online (Sandbox Code Playgroud)***Exception: Non-exhaustive patterns in function myLast
我知道你在错过案件时会收到这个错误,但我认为我已经包含了所有可能性.有任何想法吗?
在终端弄乱python时,我发现了一些奇怪的东西.如果你输入一个像这样的表达式1+2*3,终端将输出7,这很奇怪,因为这不应该打印任何东西,但确实如此.但是如果你使用诸如print("hello world")之类的函数,它将输出hello world,而不是Noneprint返回的内容.此外,键入True输出True和False输出False,但键入None不输出任何内容.python如何决定何时输出值?
scala> 5 / 0
java.lang.ArithmeticException: / by zero
... 28 elided
Run Code Online (Sandbox Code Playgroud)
一个简单的算术表达式省略了二十八个帧?这些框架是什么?为什么Scala需要那么多框架来进行安全划分?为什么首先要消除它们?