En C# je peux ajouter des opérateurs implicites à une classe comme suit:Y at-il un équivalent à la création d'un C# opérateur implicite dans F #?
public class MyClass
{
private int data;
public static implicit operator MyClass(int i)
{
return new MyClass { data = i };
}
public static implicit operator MyClass(string s)
{
int result;
if (int.TryParse(s, out result))
{
return new MyClass { data = result };
}
else
{
return new MyClass { data = 999 };
}
}
public override string ToString()
{
return data.ToString();
}
}
Ensuite, je peux passer toute fonction qui attend un objet MyClass une chaîne ou un int. par exemple
public static string Get(MyClass c)
{
return c.ToString();
}
static void Main(string[] args)
{
string s1 = Get(21);
string s2 = Get("hello");
string s3 = Get("23");
}
Est-il possible de le faire en F #?
Cela semble être un nom d'opérateur de préfixe invalide dans F # 2.0. Les règles pour les noms d'opérateurs sont-elles définies quelque part? Je ne vois rien sur le (http://msdn.microsoft.com/en-us/library/dd233204.aspx) [MSDN] page qui indique cette restriction. – Daniel
L'omission '~' du nom semble fonctionner. Les règles ont-elles changé? – Daniel
@Daniel - oui, je pense que les règles doivent avoir changé. Omettre le '~' ne fonctionnera pas tout à fait car cela en fera un infixe plutôt qu'un opérateur de préfixe. Cependant, remplacer '~' par '!' Devrait fonctionner. – kvb