我试图在VB中实现类似currying的效果。我希望能够做到这一点:
Dim wrap = WrapNumber("-")
wrap(5) 'returns "-5-"
这是我的功能:
Private Function WrapNumber(ByVal separator As String) As Func(Of Integer, String)
Return Function(ByRef number As Integer) As String
Return separator + number + separator
End Function
End Function
我在Return
行收到错误消息:
嵌套函数与委托
的签名不同Func(Of Integer, String)
我不确定为什么我会收到此错误。函数WrapNumber
返回一个函数,该函数接受Integer
并返回String
,因此我可以看到它与Func
中的WrapNumber
具有相同的类型。 1}}签名。
答案 0 :(得分:1)
如果你打开Option Strict On,它会显示很多出错的地方。除了注释中所述的不需要ByRef之外,连接还试图将分隔符视为double。如果您进行了这些更改,那么它可以正常工作:
Dim wrap = WrapNumber("-")
Dim test As String = wrap(5)
'test is equal to "-5-"
Private Function WrapNumber(ByVal separator As String) As Func(Of Integer, String)
Return Function(number As Integer) As String
Return separator & number.ToString & separator
End Function
End Function