簡體   English   中英

F#中的ToString()覆蓋不適用於包含其他類型的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM