小编Din*_*cio的帖子

Raku 中类似 Haskell 的模式匹配

Haskell 和 Rust(以及我不知道的其他语言)有一个他们称之为“模式匹配”的发展。下面是 Haskell 中的一个例子:

data Event = HoldKey Char | PressKey Char | Err String

someFunc = let
    someEvent <- doSomeStuff
    -- What follows is a case expression using pattern matching
    thingINeed <- case someEvent of
                      HoldKey keySym -> process keySym
                      PressKey keySym -> process keySym
                      Err err -> exit err
      in keepDoingStuff
Run Code Online (Sandbox Code Playgroud)

在 Raku 中与此最接近的似乎是 多方法 multifunctions(术语在下面的答案中固定,但 multimethods 也可以工作)。

class Hold  { has $.key; }
class Press { has $.key; }
class Err   { has $.msg; }

multi …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming pattern-matching raku

20
推荐指数
3
解决办法
734
查看次数

不能在 `cargo` 中使用 `-Z macro-backtrace` 不稳定选项

我正在编写 rust 宏,但遇到了有关我无法理解的宏的错误。为了更好地理解它,我尝试通过设置-Z macro-backtrace不稳定选项并再次编译来遵循编译器的建议。这是说的建议:

note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
Run Code Online (Sandbox Code Playgroud)

但是这样做:

cargo run -Z macro-backtrace
Run Code Online (Sandbox Code Playgroud)

结果如下:

error: unknown `-Z` flag specified: macro-backtrace
Run Code Online (Sandbox Code Playgroud)

我已经通过rustup override nightly在项目目录中运行并rustup default nightly为将来使用此功能而完全切换到夜间工具链,但错误仍然存​​在。

在通过网络挖掘时,我找到了一种列出所有-Z选项的方法cargo -Z help


Available unstable (nightly-only) flags:

    -Z avoid-dev-deps   -- Avoid installing dev-dependencies if possible
    -Z minimal-versions -- Install minimal dependency versions instead of maximum
    -Z no-index-update  -- Do not update the …
Run Code Online (Sandbox Code Playgroud)

nightly-build rust rust-cargo rustup

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

lua不修改函数参数

我一直在学习lua,似乎无法简单地实现这个二叉树的工作......

function createTree(tree, max)
    if max > 0 then
        tree = {data = max, left = {}, right = {}}
        createTree(tree.left, max - 1)
        createTree(tree.right, max - 1)
    end
end

function printTree(tree)
    if tree then
        print(tree.data)
        printTree(tree.left)
        printTree(tree.right)
    end
end

tree = {}
createTree(tree, 3)
printTree(tree)
Run Code Online (Sandbox Code Playgroud)

程序在执行后返回nil.我在网上搜索了解参数传递如何在lua中工作(如果它是通过引用或值)并且发现某些类型通过引用(如表和函数)传递,而其他类型通过值传递.尽管如此,我还是将全局变量"tree"作为一个表传递给了"createTree"函数,我甚至将"left"和"right"初始化为"createTree"中的空表,用于相同的目的.我究竟做错了什么?

lua binary-tree arguments function lua-table

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