[英]ToString() override in F# doesn't work for a type containing another type
我有一個“團隊”類型,其中包含另一個“雇員”類型。 我已經覆蓋了'Employee'類型的ToString()。 但是,當我為“ Team”類型執行ToString()時,來自“ Employee”的詳細信息用標准的ToString()實現漂亮地打印出來,並且從未使用我的替代邏輯。 有人可以幫助您理解為何覆蓋無效的原因嗎? 這是代碼:
type Employee =
{
name : string
address : string
}
override this.ToString() = sprintf "Hello %s" this.name
type Team =
{
employee1 : Employee
}
with member this.ToTightString =
this.ToString().Replace(" ","")
let employee = { name="Bob"; address="Unknown"; }
let team = {employee1=employee}
printfn "%s" (employee.ToString()) // Override works!
// OUTPUT: Hello Bob
printfn "--------------------"
printf "%s" team.ToTightString // Override doesn't work
// OUTPUT: {employee1={name="Bob";address="Unknown";};}
正如@rmunn所說,即使在包含'type1'類型的類型上調用ToString(),也保留了StructuredFormatDisplay中指定的類型(例如type1)的文本表示形式。 這是一個例子:
open System.Text.RegularExpressions
[<StructuredFormatDisplay("name=Always Harry address={address}")>]
type Employee =
{
name : string
address : string
}
type AddressContainer =
{
employee: Employee
containerName: string
}
let address1 = { name="Bob"; address="Random City" }
let addressContainer1 = { employee=address1; containerName= "container1"}
printf "%s" (address1.ToString()) // prints "name=Always Harry address=Random City"
printf "%s" (addressContainer1.ToString()) // prints {employee = name=Always Harry address=Random City; containerName = "container1";}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.