我在repl控制台中玩了很多代码,我该如何清除它?我想要一个新的,而不重新启动它.可以这样做吗?
我几乎总是有一个或两个Scala REPL会话,这使得Java或Scala类很容易进行快速测试.但是,如果我更改一个类并重新编译它,REPL将继续加载旧的类.有没有办法让它重新加载类,而不是必须重新启动REPL?
举一个具体的例子,假设我们有Test.scala文件:
object Test { def hello = "Hello World" }
Run Code Online (Sandbox Code Playgroud)
我们编译它并启动REPL:
~/pkg/scala-2.8.0.Beta1-prerelease$ bin/scala
Welcome to Scala version 2.8.0.Beta1-prerelease
(Java HotSpot(TM) Server VM, Java 1.6.0_16).
Type in expressions to have them evaluated.
Type :help for more information.
scala> Test.hello
res0: java.lang.String = Hello World
Run Code Online (Sandbox Code Playgroud)
然后我们将源文件更改为
object Test {
def hello = "Hello World"
def goodbye = "Goodbye, Cruel World"
}
Run Code Online (Sandbox Code Playgroud)
但是我们不能用它:
scala> Test.goodbye
<console>:5: error: value goodbye is not a member of object Test
Test.goodbye
^
scala> import Test; …Run Code Online (Sandbox Code Playgroud) 我想评价一下
var foo = "foo";
console.log(foo);
Run Code Online (Sandbox Code Playgroud)
作为一个块,而不是逐行评估
var foo = "foo";
undefined
console.log(foo);
foo
undefined
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法将提示移动到下一行?
我已经和Scala一起工作了一段时间,并且用它编写了10,000多行程序,但我仍然对一些内部工作感到困惑.我已经熟悉Java,C和Lisp后从Python来到Scala,但即使如此,它也很慢,而且一个巨大的问题是我在尝试研究对象/类型的内部工作时经常遇到的令人沮丧的困难/类/等.与Python相比,使用Scala REPL.在Python中,您可以查看任何对象foo(类型,全局变量中的对象,内置函数等),foo以查看事物的评估结果,type(foo)显示其类型,dir(foo)告诉您可以调用它的方法,以及help(foo)获取内置文档.你甚至可以做一些事情,比如help("re")查找名为re(包含正则表达式对象和方法)的包的文档,即使没有与之关联的对象.
在Scala中,您可以尝试在线阅读文档,查看库中的源代码等,但对于您不知道在哪里甚至是什么的事情来说,这通常很难(而且经常是这样的)一大块咬掉,考虑到庞大的类型层次) -东西在不同的地方(包左右浮动scala,Predef各种隐式转换,像符号::是几乎不可能谷歌).REPL应该是直接探索的方式,但实际上,事情更加神秘.说我看过foo某个地方的引用,但我不知道它是什么.显然没有"使用REPL系统地调查Scala事物的指南",但以下是经过大量试验和错误后我拼凑起来的内容:
foo是一个值(可能包括存储在变量中的内容以及伴随对象和其他Scala object),您可以foo直接进行评估.这应该告诉你结果的类型和价值.有时结果很有帮助,有时候不是.foo是值,则可以使用它:type foo来获取其类型.(不一定具有启发性.)如果在函数调用中使用它,则可以获得返回值的类型,而无需调用函数.foo是值,则可以使用它foo.getClass来获取其类.(通常比以前更有启发性,但对象的类与其类型有何不同?)foo,你可以使用classOf[foo],虽然结果的含义并不明显.:javap foo用来反汇编一个类 - 它应该是最有用的类,但对我来说完全失败.使用失败的示例:javap:
scala> :javap List
Failed: Could not find class bytes for 'List'
Run Code Online (Sandbox Code Playgroud)
启发错误消息的示例:
scala> assert
<console>:8: error: ambiguous reference to overloaded definition, …Run Code Online (Sandbox Code Playgroud) 我看到了创建"REPL"的参考.什么是REPL?
var arDrone = require('ar-drone');
var client = arDrone.createClient();
client.createRepl();
Run Code Online (Sandbox Code Playgroud) 在Ander谈论C#的未来的最后10分钟里,他演示了一个非常酷的C#Read-Eval-Print循环,这将是学习语言的巨大帮助.
几个.NET4相关的下载已经可用:Visual Studio 2010和.NET Framework 4.0 CTP,Visual Studio 2010和.NET Framework 4 Training Kit.你知道这个REPL发生了什么吗?它是隐藏在例子中的某个地方吗?
我知道mono repl.请,没有替代解决方案.
我在osx上.我发现了这个 http://neugierig.org/software/c-repl/, 但该页面上的代码链接似乎已被破坏.
我想为clojure代码获得一个彩色的REPL,类似于使用IRB for Ruby可以做的事情.
user.clj是否有任何提供REPL自动着色的库或设置?
示例IRB:

我最近学到了(感谢技术),在REPL ---
这失败了:
user=> (:require [clojure.set :as set])
java.lang.ClassNotFoundException: clojure.set (NO_SOURCE_FILE:24)
Run Code Online (Sandbox Code Playgroud)
虽然这成功了:
user=> (require '[clojure.set :as cs])
nil
Run Code Online (Sandbox Code Playgroud)
在加载clojure.set类时.
上下文:前一行是从命名空间源文件复制的.
我的主要问题是:通过交换:和'字符,我们所做的改变是什么,现在允许后一个命令成功?
我的第二个问题是,一般来说 - 与在普通的clojure源文件中做事相比,REPL做事的准则是什么?这里假设我们可以从LEININGEN项目的根目录加载我们的repl,因此至少可以在依赖项子目录的磁盘上使用这些jar.
我对Clojure很新,我不确定我是否完全理解Clojure中撇号和反引号之间的区别.
(def x 5)
;; Question 1
(+ x x) ;; evaluates to 10
'(+ x x) ;; evaluates to (+ x x)
`(+ x x) ;; evaluates to (clojure.core/+ user/x user/x)
;; Question 2
`(~+ ~x ~x) ;; evaluates to (#<core$_PLUS_ clojure.core$_PLUS_@32ee28a9> 5 5)
Run Code Online (Sandbox Code Playgroud)
clojure ×4
node.js ×2
scala ×2
apostrophe ×1
backticks ×1
c ×1
c# ×1
c#-4.0 ×1
colors ×1
exploratory ×1
javascript ×1
node-repl ×1