List 在辩论中采用一种方法
我已经知道,List 在辩论中采用一种方法,list,methods,ocaml,List,Methods,Ocaml,我已经知道,foldright(+)[1;2;3;4;5]0将使用0作为累加器,从右到左对元素求和 现在,假设list\u obj一个对象列表,其中每个对象有4种方法,即method1、method2、method3和method4。这些方法中的每一个都不接受参数并返回一个整数 我想创建一个包含两个参数的函数,即列表和方法 let sum liste methode = foldright (+) (map (fun obj -> obj#methode) liste) 0 此函数的目的
foldright(+)[1;2;3;4;5]0
将使用0
作为累加器,从右到左对元素求和
现在,假设list\u obj
一个对象列表,其中每个对象有4种方法,即method1
、method2
、method3
和method4
。这些方法中的每一个都不接受参数并返回一个整数
我想创建一个包含两个参数的函数,即列表和方法
let sum liste methode = foldright (+) (map (fun obj -> obj#methode) liste) 0
此函数的目的是根据使用的方法汇总4个列表
所以我需要做一些类似的事情
print_int(sum list_obj method1)
print_ing(sum list_obj method2)
print_int(sum list_obj method3)
print_int(sum list_obj method4)
我知道它背后的程序设计是错误的。我该怎么做呢?方法不是值,它们不能像C++的方法指针那样作为参数传递给函数。因此:
let sum liste methode = foldright (+) (map (fun obj -> obj#methode) liste) 0
从编译器的角度来看,methode
的两次出现是完全不相关的
对于您的用例,您可以使用getter函数:
let sum getter list = List.fold_left (+) 0 (List.map getter list)
let () =
print_int @@ sum (fun obj -> obj#method1) l_obj;
print_int @@ sum (fun obj -> obj#method2) l_obj
你能解释一下这里是什么意思吗?
f@@gx
与f(gx)
是一样的,在这里它可以避免忘记关闭长表达式后面的括号。