如何用我在F#中无法控制类型定义的操作数定义重载运算符?

时间:2019-05-30 23:05:43

标签: f#

我在F#中有ABC 3种类型。我无法修改其中的两种类型AB。类型C是我控制的类型。

我要编写重载运算符,例如-

type C () =
    static member (><) (alpha : A) (beta : B) : C = zeta alpha beta
    static member (><) (beta : B) (alpha : A) : C = omega alpha beta

当我尝试调用运算符时,编译会发出以下错误-

Error FS0043 None of the types 'A, B' support the operator '><'

如何解决该问题,以便可以使用不受其类型定义控制的操作数来定义重载运算符?我只能控制其定义的类型是结果类型C

1 个答案:

答案 0 :(得分:4)

由于import os import datetime import re # get xls files xls_files = [file for file in os.listdir(os.getcwd()) if file.endswith('.xls')] # get current date now = datetime.datetime.now() # change names for item in xls_files: # split name and date part name_parts = item.split('.') get_date = re.findall('\d+-\d+-\d+', name_parts[0]) name_string_part = name_parts[0].replace(get_date[0], '') # create new name new_name = name_string_part + str(now.day) + '-' + str(now.month) + '-' + str(now.year) + '_' + '.xls' # rename file os.rename(item, new_name) 不会出现在输入参数中,因此至少在不带特征调用的重载解析中不考虑类型扩展的情况下,否则不会起作用。

因此,您必须包括C并在全局级别定义运算符:

C

注意:如果需要,您可以在内部使用其他运算符名称