Size: a a a

2020 December 20

g

gsomix in F# Chat
(fun () -> ())
let (|Int|_|) (str: string) =
  match System.Int32.TryParse str with
  | true, value -> Some value
  | _ -> None


let main2 argv =
   match argv |> Seq.truncate 2 |> Seq.toList with
   | [Int(port)::ipadress::_] -> printfn "port: %d, ipadress: %s" port ipadress
   | _ -> printfn "Error"
Не даёте шансов разобраться самостоятельно. :)
источник

((

(fun () -> ()) in F# Chat
gsomix
Не даёте шансов разобраться самостоятельно. :)
тогда так
let █████ =
  match [Данные удалены]
источник

AH

Ayrat Hudaygulov in F# Chat
(fun () -> ())
let (|Int|_|) (str: string) =
  match System.Int32.TryParse str with
  | true, value -> Some value
  | _ -> None


let main2 argv =
   match argv |> Seq.truncate 2 |> Seq.toList with
   | [Int(port)::ipadress::_] -> printfn "port: %d, ipadress: %s" port ipadress
   | _ -> printfn "Error"
Первый активный патерн надо делать генериком
источник

AH

Ayrat Hudaygulov in F# Chat
Ты ж не будешь его для каждого типа объявлять?
источник

((

(fun () -> ()) in F# Chat
а это уже задание на дом
источник

AH

Ayrat Hudaygulov in F# Chat
Ну там нетривиально на самом деле
источник

ЕБ

Евгений Бурмистров... in F# Chat
(fun () -> ())
тогда так
let █████ =
  match [Данные удалены]
Блин это прекрасно
источник

AH

Ayrat Hudaygulov in F# Chat
Но будет чот типа
match str with
| Parse(x: int) -> ...
| Parse(x: Guid) -> ...
| Parse(x: long) -> ...
источник

AH

Ayrat Hudaygulov in F# Chat
Там генерик будет задаваться выходным типом, а сам активный патерн должен работать на дук тупинге через сртп
источник

g

gsomix in F# Chat
Ayrat Hudaygulov
Ну там нетривиально на самом деле
А не так уж и сложно. :)
источник

AH

Ayrat Hudaygulov in F# Chat
gsomix
А не так уж и сложно. :)
Несложно, но и не тривиально!!1
источник

DP

Denis Proshutinskii in F# Chat
7 строк не самого очевидного кода могут принять любое значение, которое можно распарсить через TryParse, но нужно ли нам такое?
источник

DP

Denis Proshutinskii in F# Chat
Всегда забавно смотреть во что компилятор превращает написанные методы
public static FSharpOption<a> |Parsed|_|<a>(string str)
{
 a val = default(a);
 a value = val;
 if (0 == 0)
 {
   throw new NotSupportedException("Dynamic invocation of TryParse is not supported");
 }
 if ((bool)(object)null)
 {
   return FSharpOption<a>.Some(value);
 }
 return null;
}
источник

AH

Ayrat Hudaygulov in F# Chat
Denis Proshutinskii
7 строк не самого очевидного кода могут принять любое значение, которое можно распарсить через TryParse, но нужно ли нам такое?
Почему нет? Для этого сртп и придумали? В чем там неочевидность?
источник

AH

Ayrat Hudaygulov in F# Chat
Это как бы один из самых отличных кейсов для сртпшечки
источник

DP

Denis Proshutinskii in F# Chat
Каждый раз когда хочется написать с ними что-то приходится лезть в документацию, поскольку такую кракозябру сложно запомнить
( ^a : (static member TryParse : string * byref< ^a> -> bool) (str, &value))
источник

AH

Ayrat Hudaygulov in F# Chat
Denis Proshutinskii
Всегда забавно смотреть во что компилятор превращает написанные методы
public static FSharpOption<a> |Parsed|_|<a>(string str)
{
 a val = default(a);
 a value = val;
 if (0 == 0)
 {
   throw new NotSupportedException("Dynamic invocation of TryParse is not supported");
 }
 if ((bool)(object)null)
 {
   return FSharpOption<a>.Some(value);
 }
 return null;
}
Не, компилятор превращает их точно не в сишарп!
источник

g

gsomix in F# Chat
Добавил сниппет в свою коллекцию наркомании. :)
источник

EZ

Eugene Zakharov in F# Chat
всем привет, ткните на актуальный гитхаб пример\sample с asp net core на F#. с EF core или без него, пофиг.
но чёт нормальное, а то гуглится в основном какая-то ересь
источник

DP

Denis Proshutinskii in F# Chat
он превращает в il, который потом интересно декомпилировать
ну и на srtp генерируется 2 метода, не считая копирования определения в  вызывающий метод
источник