2016-10-04 25 views
1

我試圖在VB中實現類似咖喱的效果。我希望能夠做到這一點:嵌套函數沒有與委託相同的簽名

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,因此從我所看到的它具有與WrapNumber簽名中給出的Func相同的類型。

+2

只是spitballing,但我敢打賭,'ByRef'是造成你的問題。 'Func'不支持ByRef參數。 –

+1

刪除'ByRef'並使用'&'而不是'+' –

回答

1

如果你打開Option Strict On,它會告訴你很多錯誤。除了註釋中所述的ByRef不需要之外,連接還試圖將分隔符視爲雙精度型。如果你做出這些改變,那麼它工作正常:

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 
+0

您也可以刪除外部'ByVal'(至少爲了一致性)。 「ToString」相同,但並不嚴格需要 – Sehnsucht

相關問題