Ruby数组模式匹配

Fra*_*ice 3 ruby haskell functional-programming

我是Ruby的编程新手,并且已经看到它具有一些功能.想知道是否有一种方法可以在阵列上进行模式匹配; 我希望完成以下任务:

split_string = str.split("_", 2)
fst = repo_branch_split.first
snd = repo_branch_split.second
Run Code Online (Sandbox Code Playgroud)

以类似Haskell的方式:

split_string@(fst : snd) = str.split("_", 2)
Run Code Online (Sandbox Code Playgroud)

红宝石中是否有类似的东西?

sme*_*fju 9

这是Ruby中的并行赋值.您可以通过这种方式为变量分配数组:

fst, snd = str.split("_", 2)
Run Code Online (Sandbox Code Playgroud)

您还可以通过将数组的其余部分分配给单个变量来实现Haskell的头/尾行为:

head, *tail = "foo_bar_baz".split("_")
# head => "foo"
# tail => ["bar", "baz"]
Run Code Online (Sandbox Code Playgroud)

如果没有星标tail,它将只分配bar字符串并baz"消失".

  • 到目前为止,这是唯一的答案,它回答了所说的问题,并阐明了"并行分配"和"模式匹配"之间的区别.BTW,OP中的Haskell片段不是模式匹配示例中的严格意义. (5认同)