Что Вы думаете о многострочных лямбдах в VB 10

// First
@Multipart
@POST("retrofit-example/multipartPOSTtest.php")
fun uploadFile(@Part file: MultipartBody.Part): Call

// Second
@Multipart
@POST("retrofit-example/multipartPOSTtest.php")
fun uploadFile(@Part file: MultipartBody.Part,
               @Part("postTest") valForPOST: RequestBody): Call

Метод ответа: pastebin

11
задан MPelletier 10 May 2012 в 12:24
поделиться

6 ответов

Лично, я думаю, что синтаксис VB для делегатов и лямбд является абсолютно поддельным. Я имею в виду, продвиньтесь, AddressOf! Это было прекрасно в VB6. Это определенно не прекрасно на языке, таком как VB.NET, где функции нужно рассматривать как первоклассных граждан (хотя они действительно не, конечно), и где преобразование из групп метода делегатам более или менее прозрачно.

Теперь введение подставляемых функций является ужасно подробным. Я на самом деле полагаю, что C# приближаются – x => f(x) тарифицировал бы очень хорошо в VB, потому что он показывает точно, что он делает. В текущем состоянии я предпочитаю C# для любой работы функционального программирования, которая является жалостью, потому что я обычно одобряю VB.

Теперь, я действительно радуюсь, что VB наконец получает многострочные лямбды и лямбды оператора, потому что они иногда все еще полезны (возьмите случай Parallel.For). Но синтаксис испорчен. То же идет для итераторов, между прочим (если они должны превратить его в VB10).

14
ответ дан 3 December 2019 в 05:14
поделиться

Я могу думать о двух причинах первое, что пришло на ум, почему я люблю его! Ожидание слишком долго этого.

Во-первых:

 Private Sub SomeMethod()
     Dim SomeVariable as String = "Some text."

     AddHandler SomeButton.Click, Sub()
                                      SomeVariable += " Some more text"
                                      MessageBox.Show(SomeVariable)
                                  End Sub

Во-вторых:

 Private Sub SomeMethodRunningInAnotherThread()
     Me.Dispatcher.Invoke(Normal, Sub()
                                      'Do some other stuff '
                                      SomeTextBox.Text = "Test"
                                  End Sub)
 End Sub
2
ответ дан 3 December 2019 в 05:14
поделиться

Предпочтением я - разработчик C#, но использовал VB 9 почти исключительно приблизительно в течение года теперь. Вещью № 1 о VB 9, который разбивает мое сердце, являются ограниченные лямбды. Лямбды в VB 9 ограничены следующими способами:

  • Только один оператор.
  • Они должны возвратить значение.

Таким образом, метод ForEach на наборах не будет работать с лямбдами, и только очень самый простой из операций будет работать. Таким образом, большую часть времени необходимо переместить логику в некоторый другой метод и использовать AddressOf. Много раз это раскалывает удобочитаемость кода поразительным и душераздирающим способом.

Это - что-то, что я чувствую, что многие не взяли бы на том, если они не использовали анонимные методы бегло на другом языке, который полностью поддерживает их (C#, JavaScript, и т.д.), а не хромая поддержка, которую они имеют в VB 9.

Я чрезвычайно счастлив, что они фиксируют лямбды в VB 10.

4
ответ дан 3 December 2019 в 05:14
поделиться

Полная анонимная поддержка метода в VB означает, что можно начать брать более функциональный стиль с вещами. Если Sub () Конец, Sub должен пойти на отдельные строки..., который причиняет боль. Я надеялся бы, что они позволят одной строке анонимные методы, так долго был только один оператор.

0
ответ дан 3 December 2019 в 05:14
поделиться

Вы испытываете необходимость в мультилинии, после того как мы получаем библиотеку ParallelFX.

Например, позволяет, говорят, что Вы хотели сделать эту параллель цикла:

For i = 0 to 100
  '12 lines of code'
Next

Параллельная версия была бы:

Parallel.For( 0, 100, sub(i)
  '12 lines of code'
  End Sub )

Это работает путем превращения кишок цикла в совершенно новую замену. Тот новый sub называют потоки N, N обычно являющийся количеством доступных ядер.

0
ответ дан 3 December 2019 в 05:14
поделиться

Нет простых способов справиться с этим:

Преобразование лямбда-выражения тела оператора C # в VB

без многострочных лямбда-выражений.

вздох

Так что да, я очень хочу, чтобы это было полностью обнародовано.

-Adam

0
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: