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