
Nikolay
26.04.2017
05:15:42
Не, это не конкретно мне, мне это не нужно сейчас

Pavel
26.04.2017
05:15:43
или сделать { createMessage param1 param2 with optionalParam3 = "blah" } |> sendMessage
можно принимать лямбду, которая настраивает опять же

Nikolay
26.04.2017
05:17:44
И всё равно, не думаю что этот вариант сильно лучше static member

Google

Pavel
26.04.2017
05:18:32
А как ты static member каррировать хочешь, кстати?
Там же кортеж параметров передается
опять же, с выводом типов сложнее становится

Nikolay
26.04.2017
05:21:38
Ну да, его тоже не получится каррировать

Evgeniy
26.04.2017
05:39:14
@the_RAMZAY В VS2017 скоро появится отображение сигнатур, как в vscode.

Akhmed
26.04.2017
07:01:06

Evgeniy
26.04.2017
07:01:38
https://twitter.com/kot_2010/status/857104781789278210

Akhmed
26.04.2017
07:03:21
? этого очень сильно не хватало в VS

Nikolay
26.04.2017
07:09:15
Ещё бы поддержку .Net Core завезли)

Vasily
26.04.2017
07:12:18
Завезут,но потом, думаю
Вроде как в рефлекшн все упирается

Nikolay
26.04.2017
07:19:37
Ещё раз спрошу :) Как лучше сделать функцию, которая принимает 8 аргументов, из которых 5 - опциональны? Пока сделал через static member, но я так понимаю это не лучший вариант

Pavel
26.04.2017
07:21:24
Я же уже ответил

Google

Nikolay
26.04.2017
07:22:43
Ну интересует мнение остальных, способы, которыми сделать такую штуку вижу, но какой лучше использовать?

Pavel
26.04.2017
07:23:39
Ну даже в обычном императивном программинге не рекомендуется иметь функции с тремя и более параметрами
Вероятно - семантика неправильная.

Vasily
26.04.2017
07:25:13
Если много параметров, их можно завернуть в отдельный класс

Nikolay
26.04.2017
07:28:11
Типа такие варианты (код может быть кривой, но смысл думаю понятен)
let test a b c (d: int option) (e: int option) (f: int option) (g: int option) (h: int option)
static member test (a, b, c, ?d, ?e, ?f, ?g, ?h)
let test (a: SomeType)

Vasily
26.04.2017
07:28:28
Ну заверни в рекорд
Не придумывай ты проблем на ровном месте

Vlad
26.04.2017
07:29:09
промежуточный класс тут надо

Vasily
26.04.2017
07:29:22
Ну и не совсем понятен контекст разработки, из которого родилась подобная сигнатура

Nikolay
26.04.2017
07:29:27

Vasily
26.04.2017
07:30:06
Ну это внешний интерфейс

Nikolay
26.04.2017
07:30:06

Vasily
26.04.2017
07:30:26
Я бы по-другому сделал
Тут паттерн Builder хорошо ложится

Vlad
26.04.2017
07:37:48
или тип с n конструкторами

Artemko
26.04.2017
07:39:13
Чем рекорд с опциями плох?

Nikolay
26.04.2017
07:40:17

Roman
26.04.2017
07:43:56
https://m.hh.ru/vacancy/20361382

Google

Летучая
26.04.2017
07:47:29
??

Алексей
26.04.2017
07:47:41
Not bad

Nikolay
26.04.2017
07:48:09
Остаётся ещё один вопрос)
Есть методы, у которых 2-3 одинаковых параметра, как лучше их сделать?

Roman
26.04.2017
07:48:50

Nikolay
26.04.2017
07:48:52
Через тип, или обычные аргументы функции?
https://core.telegram.org/bots/api#getchatmember
Вот такие
Вроде нормальный вариант через простые аргументы функции, не уверен только насколько это хорошо, когда часть методов принимает тип, а часть просто аргументы

Roman
26.04.2017
07:53:08
Да, наверное так и буду делать
Есть вариант ещё типа fable way(но в обычном f# может быть сомнительным): делаешь DU с параметрами типа
type BlaBlaOptions =
| OptionOne of int
| OptionTwo of String
...
| OptionN (для булевых например)
и
let myFunc (options:BlaBlaOptions list) =
Тут проверять список и настраивать)
myFunc [OptionOne(1) ;OptionTwo("1")]

Nikolay
26.04.2017
07:54:19
Мне кажется это менее удобный вариант

Roman
26.04.2017
07:54:28
ChatId прям просится в отдельный тип
type ChatId =
| StringId of string
| IntId of int
with static member Create(id:string) = StringId(id)
with static member Create(I'd:int) = IntId(id )

Vasily
26.04.2017
07:59:12
Тогда уж private |StringId
Шоб наружу не светился

Roman
26.04.2017
07:59:34
Не понял

Vasily
26.04.2017
07:59:47
Ну если этот класс наружу выставлять

Google

Vasily
26.04.2017
07:59:57
То в с# будет весело

Roman
26.04.2017
08:00:11
Поправил код
Я так понимаю либа для F#)
Для с# отдельный модуль с обёртками же

Nikolay
26.04.2017
08:05:49
Либу пишу онли F#
Для C# есть парочка таких, обойдутся)

Roman
26.04.2017
08:07:21

Алексей
26.04.2017
08:07:33
Create(I'd:int) это опечатка?

Nikolay
26.04.2017
08:07:40
sendMessageAsync { chatId: ChatId.Create(mychat.Id) }

Roman
26.04.2017
08:07:44

Алексей
26.04.2017
08:08:29
Спасибо

Nikolay
26.04.2017
08:08:36
mychat: Chat, в Chat - id всегда int

Roman
26.04.2017
08:08:43

Nikolay
26.04.2017
08:09:03
Вообще в почти всегда ChatId - int, в редких случаях он string

Roman
26.04.2017
08:11:18
ещё ф-цию createId id = IntId(id)
Для string такую же, но с суффиксом str

Nikolay
26.04.2017
08:11:46

Roman
26.04.2017
08:12:22
да, оно надо?)

Nikolay
26.04.2017
08:12:56
да, оно надо?)
https://core.telegram.org/bots/api#editmessagereplymarkup

Roman
26.04.2017
08:13:00

Nikolay
26.04.2017
08:13:42
Как тогда эта функция будет выглядеть?)

Google

Roman
26.04.2017
08:14:07

Vasily
26.04.2017
08:14:19
Короче

Roman
26.04.2017
08:14:21

Vasily
26.04.2017
08:14:45
Integer or string в документации всего лишь значит, что выбор типа данных на откуп разработчику
Имхо

Nikolay
26.04.2017
08:15:10
Ну оно всегда всё равно в string преобразуется

Vasily
26.04.2017
08:15:20
Ну и катай его стрингой

Nikolay
26.04.2017
08:15:41
Но, в типах в основном используется int

Vasily
26.04.2017
08:15:56
Тогда в твоих апи должен быть int
И катай его интом

Nikolay
26.04.2017
08:16:39
Но в качестве Id может быть строка вида: afa4sLZozc123fL

Vasily
26.04.2017
08:17:07
Ну в типах же ты его не сможешь использовтаь
Тогда и в типах строка

Алексей
26.04.2017
08:17:17

Nikolay
26.04.2017
08:18:41
Там string если я не ошибаюсь, используется только для Id'ов inline сообщений
Короче ладно, что-нибудь придумаю

Max
26.04.2017
09:31:37
Как можно наиболее удобно прогать на F# в vsCode ?
какие там есть фишечки, если кто знает, мб поделились бы?

Nikolay
26.04.2017
09:33:10
А так хз что ещё

Max
26.04.2017
09:33:32

Nikolay
26.04.2017
09:34:08