DOBON.NETプログラミング道掲示板

■34373 / 1階層)  ラムダ式の勉強中
□投稿者/ 魔界の仮面弁士 大御所(1253回)-(2019/11/07(Thu) 14:11:35)
  • アイコンNo34372に返信(VBはじめましたさんの記事)
    > ラムダ式の勉強をはじめました(下記のコードに対する質問)
    投稿モードが「通常モード」の場合、HTML の特性上
    連続した空白が一つにまとめられ、行頭空白は失われます。

    コード内のインデントを残す場合は、投稿時に
    「図表モード」を選択してください。


    > コメントの@とAをDelegateで書くと、@−DとA−Dの形になると
    > 思いますが、あってますか?(動作は確認したのでなんとか同じ動きになります)

    いいえ。x のデータ型が明示されていないので、@のコードは
    Option Strict On モードではコンパイルエラーになりますし、
    Option Strict Off では、x が As Object としてコンパイルされます。

    そのため、@に相当するデリゲートの引数と戻り値は
      (x As Integer) As Integer
    ではなく
      (x As Object) As Object
    です。


    > もっと、適切な書き方があれば教えてください。

    @で、引数と戻り値が Integer であることを明示するために、
    下記のように書くことができます。

    Dim increment1 = Function(x As Integer) x + 1
    Dim increment1 As TestDelegateF = Function(x As Integer) x + 1
    Dim increment1 As TestDelegateF = Function(x) x + 1
    Dim increment1 As Func(Of Integer, Integer) = Function(x) x + 1



    > Dim d3 As SampleDelegateS = AddressOf increment.Method3 'A-D
    > Public Delegate Sub TestDelegateS(x As String)

    SampleDelegateS というのは
    TestDelegateS の誤記でしょうか。


    提示されたコードでは、クラスのインスタンスメソッドを割り当てていますが、
    Module 内のメソッドや Shared なメソッドを割り当てることもできます。

    Dim method As Action = AddressOf Console.WriteLine


    またイベントハンドラと同様、一つのデリゲートに複数のメソッドを割り当てることもできます。

    Sub Main()
      Dim method = DirectCast(System.Delegate.Combine(
        New System.Action(Sub() System.Console.WriteLine("ABC")),
        New System.Action(AddressOf System.Console.WriteLine),
        New System.Action(Sub() System.Console.WriteLine("XYZ")),
        New System.Action(AddressOf Now.ToString),
        New System.Action(Sub() MsgBox("マルチキャストデリゲート"))),
        System.Action)
      method()
    End Sub


    > (質問2)
    > コメントの@を1行で書くと、@-1行になるとおもいますが、
    > Aを1行で書くことはできない。であってますか?

    Aを単行とするなら、このように書けます。

    Call (Sub(x) Console.WriteLine(x))("Hello")
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←ラムダ式の勉強中 /VBはじめました →Re[2]: ラムダ式の勉強中 /VBはじめました
 
上記関連ツリー

Nomalアイコン ラムダ式の勉強中 / VBはじめました (19/11/07(Thu) 10:24) #34372
Nomalアイコン ラムダ式の勉強中 / 魔界の仮面弁士 (19/11/07(Thu) 14:11) #34373 ←Now
  └Nomalアイコン Re[2]: ラムダ式の勉強中 / VBはじめました (19/11/07(Thu) 18:27) #34374 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -