如何编写一个带两个字符串并将它们相互比较的匹配函数?现在我就是这个。第一个不起作用。还有更好的方法吗?
let matchFn ([<Literal>]matchString) (aString : string) = match aString with
matchString -> true
| _ -> false
let matchFn (matchString : string) (aString : string) = match aString with
_ when (matchString = aString) -> true
| _ -> false
答案 0 :(得分:4)
在这种特定情况下,你当然可以写aString = matchString
,但我想你是在询问一般情况。只允许在模块级别使用文字,并且它们的右侧必须有一个简单的常量表达式(source)。
但是,对于这种情况,您可以使用活动模式。例如(来自here):
let (|Equals|_|) expected actual =
if actual = expected then Some() else None
然后像这样使用它:
let matchFn (matchString : string) (aString : string) =
match aString with
| Equals matchString -> true
| _ -> false
答案 1 :(得分:1)
你可以使用看守的比赛:
let matchFn matchString (aString : string) = match aString with
x when x = matchString -> true
| _ -> false
或者,或许更具惯用性:
let matchFn (matchString:string) = function
| x when x = matchString -> true
| _ -> false