假设我们需要评估源文件中的多个子句,例如
测试.clj
@(def x 1)
@(def y 2)
@(def z 3)
Run Code Online (Sandbox Code Playgroud)
clj如果我们简单地使用或 ,则仅显示最后一个评估lein repl,
user => (load-file "test.clj")
3
Run Code Online (Sandbox Code Playgroud)
我们可以包围他们每个人来println展示他们所有人,
测试与 println.clj
user => (load-file "test.clj")
3
Run Code Online (Sandbox Code Playgroud)
user => (load-file "test-with-println.clj")
1
2
3
nil
Run Code Online (Sandbox Code Playgroud)
有哪些更好的替代方案可以避免对println整个源代码进行侵入,同时能够在 REPL 的保护下打印出所有预期的评估?
@解决方案
感谢tap>@Sean Corfield 的回答,我们可以得到预期的结果,如下所示,
tap>.测试与tap.clj
(println @(def x 1))
(println @(def y 2))
(println @(def z 3))
Run Code Online (Sandbox Code Playgroud)
tap>由 开启add-tap。user=> (load-file "test-with-tap.clj")
nil
user=> (add-tap …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个多行函数以在 OCaml REPL 中使用。我已经看过这个问题,但是在 REPL 中使用它时建议的语法似乎不起作用。
要使用一个人为的示例,我无法编译以下内容:
let theFun: int -> int = fun x ->
let foo = x;
foo;;
Run Code Online (Sandbox Code Playgroud)
当我输入没有“;;”的时候 在此在线 REPL中,它们无论如何都会被添加,这给了我一个语法错误。当我在本地计算机上使用 REPL 时,除非包含“;;”,否则不会对输入进行求值,这也会导致语法错误。
我想创建一个自定义节点 REPL 并使其与打字稿一起使用。如 ts-node 文档中所述
节点评估
nodeEval(代码:字符串,上下文:任何,_文件名:字符串,回调:(错误:null | >错误,结果?:任何)=>任何):void
定义于 src/repl.ts:91
eval 实现与节点的 REPL API 兼容
如果您想手动创建自己的节点 > REPL 实例并将 eval 委托给此 ReplService,则可以在高级场景中使用。
例子:
Run Code Online (Sandbox Code Playgroud)import {start} from 'repl'; const replService: tsNode.ReplService = ...; // assuming you have already created a ts-node ReplService const nodeRepl = start({eval: replService.eval});块引用
参数
代码:字符串
上下文:任何
_文件名:字符串
回调:(错误:null | 错误,结果?:任何)=> 任何
(err: null | 错误,结果?: 任何): 任何
参数
错误:空| 错误
可选结果:任意
返回任何
返回无效
nodeEvalReplService是使用方法创建的类的成员createRepl。eval它似乎与可以向下传递给方法的参数兼容start。
所以我写了这个:
import { …Run Code Online (Sandbox Code Playgroud) re.pl从 Devel::REPL使用:
eddie@MYPC0:~$ re.pl
$ $a++
0
$ $a++
1
$ $a++
2
$ $a++
3
$ $a++
4
$ $a++
5
$ $a++
6
$ print $a
1
$ $a++
7
Run Code Online (Sandbox Code Playgroud)
print $a打印1我是否初始化变量。看来它不能print $a,并且它打印另一种引用,我也不明白它是否丢失了引用,为什么打印的值1而不是0
另一个测试:
eddie@MYPC0:~$ re.pl
$ $a =1
1
$ print $a
1
$ $a++
1
$ print $a
1
$ $a++
2
$ $a++
3
$ print $a
1
$ $a++
4
$ print $a
1
$ …Run Code Online (Sandbox Code Playgroud) 在Python REPL中
dir(str)
Run Code Online (Sandbox Code Playgroud)
版画
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
Run Code Online (Sandbox Code Playgroud)
即.所有可用的字符串方法.
如何查看所有可用的全局方法,如"print","list","len"等?
在FSI我输入
> let a = 10;;
val a : int = 10
> let a = a + 1;;
val a : int = 11
Run Code Online (Sandbox Code Playgroud)
看起来我在这里有一个可变变量?我错过了什么吗?
这似乎是一个非常愚蠢的问题,但我真的被困住了,所以这里是:
通常,当我想使用 toString() 时,我会写
int i = 50;
string str = i.toString();
Run Code Online (Sandbox Code Playgroud)
根据.NET Pearls 的说法,这是正确的用法。毕竟,toString() 是Object 类中的方法。但 scriptcs 告诉我:
错误 CS1061:“int”不包含“toString”的定义,并且找不到接受“int”类型的第一个参数的扩展方法“toString”(您是否缺少 using 指令或程序集引用?)
好吧,也许由于某种原因这无法工作,让我们尝试使用 System.Convert 类:
错误 CS0117:“System.Convert”不包含“toString”的定义
我尝试添加usings 甚至加载mscorlib.dll程序集,但没有运气。在解释文件和使用 REPL 时,我都会遇到这种情况。我真的陷入了愚蠢的字符串转换,我正在寻求帮助。如果它改变了什么,我从巧克力那里得到了脚本。Scriptcs版本0.9.0;.NET 版本 4.0。
#r "mscorlib.dll"
using System;
using System.Convert;
int i = 50;
string str = Convert.toString(i);
//string str2 = i.toString(); //uncomment to get the other error
Console.WriteLine(str);
Run Code Online (Sandbox Code Playgroud)
是string.Format(),StringBuilder以及"" + value我所拥有的一切吗?
据我所知,在scala中,def用于使表达式被懒惰地评估.
例如:
var num=123;
def i=10000+num;
print(i);
//result 1: ouput 10123
num=456
print(i)
//result 2: output 10456
var num=789
print(i)
//result 3: output 10456
Run Code Online (Sandbox Code Playgroud)
我的问题是,之后var num=789为什么def i=10000+num没有被评估为10789.
我想在重新声明变量num后var num=789,scala重新创建符号表中具有相同符号num的其他项.
我对吗?为什么rsult 3输出10456而不是10789.
谢谢.
你有一个单词USE,它将创建一个文件.
USE xxx ( -- )
将OS文本文件xxx指定为"Forth disk".
但是,目前尚不清楚如何在交互式会话中写入该FORTH磁盘.有动词如FLUSH和,UPDATE但他们都没有看到做任何事情.我正在使用gforth.我在会话中创建单词并使用它们.我不明白FORTH磁盘在这种情况下是如何工作的.它听起来像R save.image(),除了我无法得到任何东西来保存.你能提供一系列命令,导致某些东西被写入参数USE吗?
我最近在玩 Clojure,我在那里遇到了一些棘手的事情。
为什么:
(set [3 3 3 3 4 "Sample String"])
Run Code Online (Sandbox Code Playgroud)
在我的 REPL 中返回:
(set [3 3 3 3 4 "Sample String"])
Run Code Online (Sandbox Code Playgroud)
当它自然而然地应该返回时:
;=> #{4 3 "Sample String"}
Run Code Online (Sandbox Code Playgroud)
有什么解释吗?
counter = 1;
time = 60;
while (counter < time) {
console.log(counter);
counter += 1;
}
Run Code Online (Sandbox Code Playgroud)
为什么代码的值高于1到60
以下代码的输出为1到59:
counter = 1;
time = 60;
while (counter < time) {
console.log(counter);
counter++;
}
Run Code Online (Sandbox Code Playgroud)
我在终端上用Node测试了两个代码.
我启动 repl 并cjl收到提示
Clojure 1.11.1
user=>
Run Code Online (Sandbox Code Playgroud)
在用户提示下,我输入(+ 1 2 3)并按回车键。输出是这样的:
user=> (+ 1 2 (+ 1 2 3)
6
Run Code Online (Sandbox Code Playgroud)
我认为我输入的操作被覆盖了。
我在 i3 窗口管理器中,但是当我退出回到操作系统控制台时,它会执行相同的操作。我该如何解决这个问题。
如果重要的话,我使用 FreeBSD。