在参数中采用方法
Taking a method in argument
我已经知道 foldright (+) [1;2;3;4;5] 0
将使用 0
作为累加器从右到左对元素求和。
现在,假设 list_obj
一个对象列表,其中每个对象有 4 个方法,即 method1
、method2
、method3
和 method4
。这些方法中的每一个都没有参数并且 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
我已经知道 foldright (+) [1;2;3;4;5] 0
将使用 0
作为累加器从右到左对元素求和。
现在,假设 list_obj
一个对象列表,其中每个对象有 4 个方法,即 method1
、method2
、method3
和 method4
。这些方法中的每一个都没有参数并且 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