给定函数的骨架:
fun reformat(
str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ',
) {
println("In reformat")
}
我把它粘贴到kotlin REPL中,它抱怨了——显然是由于没有意识到它被发送了一个多行代码片段:
>>> fun reformat(
error: parameter name expected
fun reformat(
^
error: expecting comma or ')'
fun reformat(
^
error: expecting ')'
fun reformat(
^
>>> str: String,
error: expecting an element
str: String,
^
error: expecting an element
str: String,
^
etc ..
scala REPL中的:paste
的等价物是什么?
看起来Kotlin REPL打算在IDE中使用。如果你在Intellij IDEA中打开它,它就像一个魅力,允许你多行输入。我没有看到任何选项允许你在常规shell中做同样的事情。因此,在您的情况下,您可以在一行中声明函数,也可以从文件中加载脚本。
我发现了一个项目-显然是由JetBrains kotlin开发人员自己积极改进的解决这个问题和其他问题:https://github.com/Kotlin/kotlin-interactive-shell。这是他们的帮助
[0] :h
:quit or q quit the shell
:load or l <path> load file and evaluate
:type or t <expr> display the type of an expression without evaluating it
:list or ls list defined symbols
:help or h [command] print this summary or command-specific help
:paste or p enter paste mode
:syntax {on | off} syntax highlighting
:prompt [pattern] customize prompt
:set set configuration parameter
:conf list configuration parameters
:dependsOn <artifact coordinates> Load dependency from the current set of repositories
:repository <repository coordinates> Add repository for the artifacts lookup
:classpath or cp Show current script compilation classpath
特别注意:
[1] :p
// Entering paste mode (ctrl-D to finish)
那正是我要找的。它确实可以工作(尽管有丑陋的JDK9警告):
[1] :p
// Entering paste mode (ctrl-D to finish)
fun reformat(
str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ',
) {
println("In reformat")
}
// Exiting paste mode, now interpreting.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.jetbrains.kotlin.com.intellij.util.ReflectionUtil (file:/Users/steve/git/kotlin-interactive-shell/ki-shell/target/ki-shell-0.4-SNAPSHOT-shaded.jar) to method java.util.ResourceBundle.setParent(java.util.ResourceBundle)
WARNING: Please consider reporting this to the maintainers of org.jetbrains.kotlin.com.intellij.util.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[2] reformat()
ERROR No value passed for parameter 'str' (Line_3.kts:1:10)
[3] reformat("abc")
In reformat