Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop OCaml结构类型和列表_Oop_List_Interface_Ocaml - Fatal编程技术网

Oop OCaml结构类型和列表

Oop OCaml结构类型和列表,oop,list,interface,ocaml,Oop,List,Interface,Ocaml,我在OCaml中使用列表时遇到问题。我读过一些相互矛盾的语句,它们说列表是否可以在运行时修改。cons运算符可以在运行时使用吗 此外,为什么杜宾(见下文)被允许出现在吉娃娃的名单中?如何将另一只吉娃娃加入名单(如最后一行所尝试的) 你需要把清单放在右边,而不是左边。即: c3 :: arrayOfDogs;; 这就是最后一行失败的原因 就列表构造而言,假设OCaml是类型推断的,那么解释器可能会发现您正在构造一个狗列表,因为您在构造中添加了杜宾。因此,它不是吉娃娃的列表。OCaml报告的arr

我在OCaml中使用列表时遇到问题。我读过一些相互矛盾的语句,它们说列表是否可以在运行时修改。cons运算符可以在运行时使用吗

此外,为什么杜宾(见下文)被允许出现在吉娃娃的名单中?如何将另一只吉娃娃加入名单(如最后一行所尝试的)


你需要把清单放在右边,而不是左边。即:

c3 :: arrayOfDogs;;
这就是最后一行失败的原因


就列表构造而言,假设OCaml是类型推断的,那么解释器可能会发现您正在构造一个狗列表,因为您在构造中添加了杜宾。因此,它不是吉娃娃的列表。

OCaml报告的
arrayOfDogs类型是什么

也许你的意思是:
c3::arrayOfDogs

1)您可以在运行时使用cons运算符,它只返回一个新列表,而不是改变输入列表

2) OCaml中的类类型使用“结构”子类型,而不是Java风格的“名义”子类型。
arrayOfDogs
的推断类型将是“一个对象,其方法名为
bark
,类型为
unit->unit
(不一定是
dog
)”。例如:

# class cat = object 
    method bark = print_endline "meow" 
  end ;;
class cat : object method bark : unit end
# let c = new cat ;;
val c : cat = <obj>
# c :: arrayOfDogs ;;
- : cat list = [<obj>; <obj>; <obj>; <obj>]
要在末尾添加它,请使用“append”操作符
@

arrayOfDogs @ [c3]
c3 :: arrayOfDogs
arrayOfDogs @ [c3]