函数的缩写定义——shift enter 和 run code的区别?

首先,我使用的是 Julia 1.7.2,在 vscode 上编译的。

最近在学习Julia的时候发现缩写方式定义的函数在 Run code 时没有生效。但是使用 shift+enter 单行执行时能正常生效,这使我非常困惑,因为我原本以为 shift+enter 是只对单行进行 Run code 。因此陷入思考:1.shift+enter 和 Run code是否还有其它不同?2.如何才能使缩写定义在Run code时正常执行?

为了测试这个情况,我以奇偶校验的函数定义为例,用普通的函数定义方式和缩写形式都写了一遍,最后只返回了完整定义的结果。在我对缩写定义单行执行后,在terminal中测试才能返回正常结果,并且此时Run code依然只能得到完整定义的结果。

附上源码

    ```julia
    parity1(i::Integer) = i % 2 == 1 ? "Odd" : "Even"

    function parity2(i::Integer)
        if i % 2 == 0
            println("Even")
        else
            println("Odd")
        end
    end

    parity1(4)
    parity2(4)
    ```

参考 Julia in VScode 官网: Keybindings & Commands · Julia in VS Code

常用执行代码的快捷键:

快捷键 作用
ctrl Enter 在 REPL 运行当前代码
shift Enter 在 REPL 运行代码并跳到下一个
alter Enter 在 REPL 运行当前代码块
alter shift enter 在 REPL 运行当前代码块并跳转

这里代码块(Cell)指被 ## 注释隔开的代码片段。

右上角 Run Code 一般会执行整个文件,试了这段代码没遇到问题,是不是参数没选对?
深度截图_选择区域_20220905210102

3 个赞

谢谢回复,我发现了问题并不在于执行的方式,而是我在缩写定义时使用的宏,没有让其输出。在修改成println()以后能正常输出结果。

问题已解决,不是执行出现的问题。
我发现执行parity1时返回的是 ”Even“ ,而parity2返回的直接是 Even 。
把缩写形式改成以println()打印就定义成功了。我猜测原来的方式可能return了字符型的结果,但是并没有打印出来,不过原来的方式在run code后为什么没有定义成功这个问题依然没有解决。
‘’‘julia
parity1(i::Integer) = i % 2 == 1 ? println(“Odd”) : println(“Even”)
‘’‘