标签: read-eval-print-loop

在 Clojure 中使用 repl 代替 println

假设我们需要评估源文件中的多个子句,例如

测试.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)
  • REPL 将不会收到任何输出,直到tap>由 开启add-tap
user=> (load-file "test-with-tap.clj")
nil
user=> (add-tap …
Run Code Online (Sandbox Code Playgroud)

clojure leiningen read-eval-print-loop

1
推荐指数
1
解决办法
361
查看次数

REPL 中的 Ocaml 多行函数

我正在尝试编写一个多行函数以在 OCaml REPL 中使用。我已经看过这个问题,但是在 REPL 中使用它时建议的语法似乎不起作用。

要使用一个人为的示例,我无法编译以下内容:

let theFun: int -> int = fun x ->
    let foo = x;
    foo;;
Run Code Online (Sandbox Code Playgroud)

当我输入没有“;;”的时候 在此在线 REPL中,它们无论如何都会被添加,这给了我一个语法错误。当我在本地计算机上使用 REPL 时,除非包含“;;”,否则不会对输入进行求值,这也会导致语法错误。

ocaml read-eval-print-loop

1
推荐指数
1
解决办法
157
查看次数

使用 typescript 和 ts-node 的自定义节点 REPL

我想创建一个自定义节点 REPL 并使其与打字稿一起使用。如 ts-node 文档中所述

节点评估

nodeEval(代码:字符串,上下文:任何,_文件名:字符串,回调:(错误:null | >错误,结果?:任何)=>任何):void

定义于 src/repl.ts:91

eval 实现与节点的 REPL API 兼容

如果您想手动创建自己的节点 > REPL 实例并将 eval 委托给此 ReplService,则可以在高级场景中使用。

例子:

import {start} from 'repl'; 
const replService: tsNode.ReplService = ...; // assuming you have already created a ts-node ReplService
const nodeRepl = start({eval: replService.eval});
Run Code Online (Sandbox Code Playgroud)

块引用

参数

代码:字符串

上下文:任何

_文件名:字符串

回调:(错误:null | 错误,结果?:任何)=> 任何

(err: null | 错误,结果?: 任何): 任何

参数

错误:空| 错误

可选结果:任意

返回任何

返回无效

nodeEvalReplService是使用方法创建的类的成员createRepleval它似乎与可以向下传递给方法的参数兼容start

所以我写了这个:

import { …
Run Code Online (Sandbox Code Playgroud)

shell node.js read-eval-print-loop ts-node

1
推荐指数
1
解决办法
788
查看次数

re.pl:变量不能在打印中使用,但似乎保留引用,会发生什么

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)

perl read-eval-print-loop

1
推荐指数
1
解决办法
105
查看次数

在Python REPL中打印所有全局方法

在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"等?

python read-eval-print-loop

0
推荐指数
1
解决办法
89
查看次数

为什么FSharp交互允许mutable let?

在FSI我输入

> let a = 10;;

val a : int = 10

> let a = a + 1;;

val a : int = 11
Run Code Online (Sandbox Code Playgroud)

看起来我在这里有一个可变变量?我错过了什么吗?

f# read-eval-print-loop

0
推荐指数
2
解决办法
223
查看次数

无法在 scriptcs 中使用 toString() ?

这似乎是一个非常愚蠢的问题,但我真的被困住了,所以这里是:

通常,当我想使用 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我所拥有的一切吗?

read-eval-print-loop scriptcs

0
推荐指数
1
解决办法
4377
查看次数

在Scala中,为什么def在重新定义def表达式中使用的变量后不生效

据我所知,在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.

谢谢.

scala lazy-evaluation read-eval-print-loop

0
推荐指数
1
解决办法
83
查看次数

写入"第四盘"

你有一个单词USE,它将创建一个文件.

  • USE xxx ( -- )

    将OS文本文件xxx指定为"Forth disk".

但是,目前尚不清楚如何在交互式会话中写入该FORTH磁盘.有动词如FLUSH和,UPDATE但他们都没有看到做任何事情.我正在使用gforth.我在会话中创建单词并使用它们.我不明白FORTH磁盘在这种情况下是如何工作的.它听起来像R save.image(),除了我无法得到任何东西来保存.你能提供一系列命令,导致某些东西被写入参数USE吗?

io forth read-eval-print-loop gforth

0
推荐指数
1
解决办法
272
查看次数

Clojure set 和 hash-set 返回无序值

我最近在玩 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)

有什么解释吗?

clojure set hashset read-eval-print-loop

0
推荐指数
1
解决办法
112
查看次数

在具有Node的终端处,++和+ = 1之间的差异

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测试了两个代码.

javascript node.js read-eval-print-loop

-1
推荐指数
1
解决办法
140
查看次数

clj repl 覆盖输出

我启动 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。

clojure read-eval-print-loop

-5
推荐指数
1
解决办法
64
查看次数