我正在尝试 jshell,但找不到粘贴多行表达式的选项。甚至可以在 jshell 中粘贴多行。类似于 scala 提供的paste mode
.
5 回答
所以如果你有这样的代码:
int c = 2;
int j = 4;
int x = 5;
复制粘贴到 jshell 中,只处理前两条语句。
但是如果你有这样的代码:
int c = 2; int j = 4; int x = 5;
并粘贴到 jshell 中:
jshell> int c = 2; int j = 4; int x = 5;
c ==> 2
j ==> 4
x ==> 5
更多这样的代码行:
HashMap<Integer, Integer> map2 = new HashMap<>(); for (int i = 0; i < 15; ++i) { map2.put(i, i);map2.put(i, i); } System.out.println(map2);
实际上会起作用。
为什么?我不知道。
我知道复制/粘贴将起作用的唯一方法是通过(在 jshell 中输入):
/编辑
你可以随意粘贴。
我试过了,只处理了前两行。还尝试在末尾添加额外的换行符和超过三行,但仍然只处理了前两行。我不知道为什么,但我怀疑这是一个错误。
如果由于某种原因有人发现此问题,因为他们的情况迫使他们使用此版本的 JDK,其中包含错误,请尝试以下操作:
在每一行的末尾,添加一个\
字符。只要 Jshell 使用任何常见的编码,例如 ASCII 或某种 Unicode(如果不使用我会感到惊讶)并且它允许转义字符(如果它没有,它就不会是一个 shell' t) 它将强制 shell 将其作为单行处理。
任何 shell 都是如此,只要上面提到的约定被遵守,并且根据我的经验,99% 的时间都是如此。您可能遇到的唯一异常是用作转义字符的不同字符。
如果您的行不以 a 结尾,;
您可能需要添加 a;\
以便该行:
STATEMENT
转换为:
STATEMENT;\
否则,如果;
已经存在,只需添加\
.
之所以有效,是因为每次您输入一行,例如:
COMMAND
根据您的操作系统,shell 会看到:
COMMAND\n
# or...
COMMAND\r
最后一位是换行符(Mac 和 Linux)和回车符(Windows)。这些是告诉 shell 此处换行的特殊字符。由于它们是特殊字符,因此可以使用转义字符对它们进行转义,或将其解释为纯文本\
。这意味着外壳可以看到:
COMMAND; \
COMMAND; \
COMMAND; \
COMMAND
...作为:
COMMAND; COMMAND; COMMAND; COMMAND
```