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) 我正在编写 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) 我一直在学习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"中的空表,用于相同的目的.我究竟做错了什么?
arguments ×1
binary-tree ×1
function ×1
haskell ×1
lua ×1
lua-table ×1
raku ×1
rust ×1
rust-cargo ×1
rustup ×1