在参数中采用方法

Taking a method in argument

我已经知道 foldright (+) [1;2;3;4;5] 0 将使用 0 作为累加器从右到左对元素求和。

现在,假设 list_obj 一个对象列表,其中每个对象有 4 个方法,即 method1method2method3method4。这些方法中的每一个都没有参数并且 return 一个整数。

我想创建一个带有两个参数的函数,即一个列表和一个方法。

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