18

我正在尝试 jshell,但找不到粘贴多行表达式的选项。甚至可以在 jshell 中粘贴多行。类似于 scala 提供的paste mode.

4

5 回答 5

12

所以如果你有这样的代码:

 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 中输入):

/编辑

你可以随意粘贴。

于 2017-01-24T21:32:02.367 回答
11

以防万一人们仍然在这里结束,将整个代码块粘贴到的一个小调整jshell是用大括号将其包裹起来{}

{
 int c = 2;
 int j = 4;
 int x = 5; 
 // access these only in this scope though
 System.out.println("c : " + c + ", j : " + j + ", x = " + x);
}

示例屏幕:

在此处输入图像描述

于 2018-12-25T14:50:33.503 回答
5

我试过了,只处理了前两行。还尝试在末尾添加额外的换行符和超过三行,但仍然只处理了前两行。我不知道为什么,但我怀疑这是一个错误。

于 2017-01-24T22:58:34.830 回答
4

这是一个错误。已修复:https ://bugs.openjdk.java.net/browse/JDK-8169595

于 2017-08-30T20:47:13.200 回答
0

如果由于某种原因有人发现此问题,因为他们的情况迫使他们使用此版本的 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
```
于 2022-02-21T23:32:12.240 回答