2016-10-04 11 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

私は 'ByRef'が問題を引き起こしていると思います。 'Func'はByRef引数をサポートしていません。 –

+1

'ByRef'を削除し、' + 'を使わない' + ' –

答えて

1

Option Strictをオンにすると、間違っていることがたくさん表示されます。コメントに記載されているように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

関連する問題