Trong C# Tôi có thể thêm các nhà khai thác ngầm để một lớp học như sau:Có tương đương với việc tạo toán tử ngầm định C# trong F # không?
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();
}
}
Sau đó, tôi có thể vượt qua bất kỳ chức năng được mong đợi một MyClass đối tượng một chuỗi hoặc một int. ví dụ:
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");
}
Có cách nào để thực hiện việc này trong F # không?
Đây dường như là tên toán tử tiền tố không hợp lệ trong F # 2.0. Các quy tắc cho tên toán tử được xác định ở đâu đó? Tôi không thấy bất cứ điều gì trên trang [MSDN] (http://msdn.microsoft.com/en-us/library/dd233204.aspx) cho biết hạn chế này. – Daniel
Bỏ qua '~' từ tên xuất hiện để hoạt động. Các quy tắc có thay đổi không? – Daniel
@Daniel - vâng, tôi nghĩ rằng các quy tắc phải thay đổi. Bỏ qua '~' sẽ không hoàn toàn hoạt động vì nó sẽ làm cho nó trở thành một toán tử infix chứ không phải là tiền tố. Tuy nhiên, thay thế '~' bằng '!' Sẽ hoạt động. – kvb