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)
是一样的,在这里它可以避免忘记关闭长表达式后面的括号。