如何在 ocaml 中设置一个可以有多个值的变量?
How do I set a variable that can have multiple values in ocaml?
例如我想要变量名,其中变量可以是三个字符串之一:
let name="emma";"mark";"jack";;
我知道这不是正确的方法,但目前我没有更好的主意。我希望以后能够访问这个变量。
假设你想要的实际上是一个数组(因为我不确定“同时存储多个值的变量”还有什么意思),这里有一些如何在 OCaml 中使用它们的例子:
let names = [| "Emma" ; "Mark" ; "Jack"|] in
print_endline names.(0); (* Prints "Emma" *)
names
|> Array.iter print_endline; (* Prints all the names *)
let name_lengths =
names
|> Array.map String.length in
print_int name_lengths.(0) (* Prints length of the string Emma *)
如果您不需要快速随机访问并希望更加地道,请查看 OCaml 中如何使用列表来完成许多您传统上在命令式语言中使用数组的相同操作。
您显示您的变量被同时设置为看起来像 3 个字符串的东西。但是从您的描述来看,您似乎想要一个可以在不同时间分配三个不同值之一的变量。
对于第一种情况,@AmbikaE已经给出了很好的回答。
如果你想要第二种情况,你可以使用变体类型。字符串类型几乎是开放式的,但您可以使用特定值定义自己的类型:
type name = Emma | Mark | Jack
暂时不考虑在 OCaml 中“分配”值的含义,您可以使用这三个值之一定义一个变量,如下所示:
let x = Mark
如果您有(比方说)一个接受这种类型的值的函数,它的参数可以在每次调用时代表三个值中的任何一个(但只能代表一个)。
例如我想要变量名,其中变量可以是三个字符串之一:
let name="emma";"mark";"jack";;
我知道这不是正确的方法,但目前我没有更好的主意。我希望以后能够访问这个变量。
假设你想要的实际上是一个数组(因为我不确定“同时存储多个值的变量”还有什么意思),这里有一些如何在 OCaml 中使用它们的例子:
let names = [| "Emma" ; "Mark" ; "Jack"|] in
print_endline names.(0); (* Prints "Emma" *)
names
|> Array.iter print_endline; (* Prints all the names *)
let name_lengths =
names
|> Array.map String.length in
print_int name_lengths.(0) (* Prints length of the string Emma *)
如果您不需要快速随机访问并希望更加地道,请查看 OCaml 中如何使用列表来完成许多您传统上在命令式语言中使用数组的相同操作。
您显示您的变量被同时设置为看起来像 3 个字符串的东西。但是从您的描述来看,您似乎想要一个可以在不同时间分配三个不同值之一的变量。
对于第一种情况,@AmbikaE已经给出了很好的回答。
如果你想要第二种情况,你可以使用变体类型。字符串类型几乎是开放式的,但您可以使用特定值定义自己的类型:
type name = Emma | Mark | Jack
暂时不考虑在 OCaml 中“分配”值的含义,您可以使用这三个值之一定义一个变量,如下所示:
let x = Mark
如果您有(比方说)一个接受这种类型的值的函数,它的参数可以在每次调用时代表三个值中的任何一个(但只能代表一个)。