$
jest dozwolone w operatora niestandardowego, ale jeśli spróbujesz użyć $$
, <$>
lub na przykład ~$%
jako nazwę operatora otrzymasz następujący błąd:
error FS0035: This construct is deprecated: '$' is not permitted as a character in operator names and is reserved for future use
$
wyraźnie ma również „$” w nazwa, ale działa, dlaczego? tj .:
let inline ($) f y = f y
// using it works just fine:
let test =
let add x = x + 1
add $ 12
widzę $
wiele przykładów w Internecie i najwyraźniej jako szczególny rodzaj operatora. Co to jest leczenie szpiegowskie lub rola dla $
(tj. W Haskell lub OCaml) i co powinien zrobić <$>
, jeśli było to dozwolone (edycja)?
Próba oszukania systemu poprzez utworzenie funkcji takiej jak op_DollarDollar
, nie działa, sprawdzanie składni odbywa się również na stronie połączenia. Choć jako przykład, ta sztuczka działa z innymi operatorami (prawnych):
// works
let inline op_BarQmark f y = f y
let test =
let add x = x + 1
add |? 12
// also works:
let inline op_Dollar f y = f y
let test =
let add x = seq { yield x + 1 }
add $ 12
Tak, to samo nie możemy określić standard '' '' <$> operatora w F #. Powinniśmy złożyć wniosek o zezwolenie tym operatorom. – Gustavo
':' jest również na liście. ['$'] (https://github.com/Microsoft/visualfsharp/blob/6afc4f9776a5dba903ca6b11965a206fb8bc23d8/src/fsharp/lex.fsl#L117) i [':'] (https://github.com/Microsoft/visualfsharp /blob/6afc4f9776a5dba903ca6b11965a206fb8bc23d8/src/fsharp/lex.fsl#L115) –
@guy, dla ':' Rozumiem to nieco, ponieważ ':>' i ':?>' prawdopodobnie nie powinny być zastępowalne. Mógłbym powiedzieć to samo dla '::', ale ponieważ '@' jest nadpisywalne i '..' jest zbyt (zaskakujące, ale prawdziwe), zakładam tylko, że' :: 'nie jest spowodowane ochroną przed okrężnicami operatorów. – Abel