比赛案例是否能保证通过申报顺序进行测试?

Jon*_*ark 4 ocaml

我有这两个功能:

let print_length = function
    | [] -> Printf.printf "The list is empty"
    | xs -> Printf.printf "The list has %d elements" (List.length xs)

let print_length = function
    | [] -> Printf.printf "The list is empty"
    | (_ :: _) as xs -> Printf.printf "The list has %d elements" (List.length xs)
Run Code Online (Sandbox Code Playgroud)

在实践中,它们的行为是相同的,理论上,只要案例按顺序匹配,它们就应该是相同的。但这在 OCaml 中能得到保证吗?如果某些较新版本的编译器开始通过重新排列顺序来优化匹配语句怎么办?在这种情况下,只有第二个版本才能产生正确的结果。我应该担心这个吗?

Joa*_*son 5

使用 Objective Caml 开发应用程序

事实上,
函数 p1 -> expr1 | 的形式为 ...| pn -> exprn
相当于
函数 expr ->将 expr 与p1 -> expr1 |匹配 ...| pn -> 表达式

上面的注释match是这样说的;

将 expr 与 |匹配 p1 -​​> expr1
:
| pn -> 表达式

表达式 expr 按顺序与各种模式 p1, ..., pn 匹配。

所以不,这是语言的一部分,你不需要担心。