W języku C# można dodać operatorów ukryte do klasy jak następuje:Czy istnieje odpowiednik utworzenia niejawnego operatora C# w 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();
}
}
Wtedy będę mógł przekazać dowolną funkcję, która spodziewa się MojaKlasa obiekt ciąg lub int. np
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");
}
Czy istnieje sposób to zrobić w F #?
Wygląda na to, że jest to niepoprawna nazwa operatora prefiksu w języku F # 2.0. Czy reguły nazw operatorów są gdzieś zdefiniowane? Nic nie widzę na stronie [MSDN] (http://msdn.microsoft.com/en-us/library/dd233204.aspx), która wskazuje to ograniczenie. – Daniel
Pominięcie '~' z nazwy wydaje się działać. Czy zasady się zmieniły? – Daniel
@Daniel - tak, myślę, że zasady musiały się zmienić. Pominięcie '~' nie zadziała, ponieważ spowoduje, że będzie to raczej infiks niż operator prefiksu. Jednak zastąpienie '~' '!' Powinno działać. – kvb