C#では、次のように暗黙の演算子をクラスに追加できます。F#で暗黙のC#演算子を作成するのと同じことはありますか?
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();
}
}
次に、MyClassオブジェクトに文字列またはintが必要な関数を渡すことができます。 eg
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");
}
F#でこれを行う方法はありますか?
これは、F#2.0の無効なプレフィックス演算子名のようです。演算子名の規則はどこかで定義されていますか?この制限を示す[MSDN](http://msdn.microsoft.com/en-us/library/dd233204.aspx)ページに何も表示されません。 – Daniel
名前から '〜'を省略すると動作します。ルールは変わりましたか? – Daniel
@ダニエル - はい、私はルールが変更されているに違いないと思います。 '〜'を省略すると、接頭辞演算子ではなく接尾辞になります。しかし、 '〜'を '!'に置き換えるとうまくいくはずです。 – kvb