修改StringFormat的函数

时间:2015-08-05 17:49:40

标签: f# string-formatting

我想创建一个函数,它将StringFormat作为参数,为它添加一个任意字符串,并返回一个函数,该函数接受正确的参数数量和类型,并返回一个用{{1}创建的字符串和改变的格式。

目标是创建一个产生这样结果的函数(前缀为sprintf的字符串):

#

我天真地试图做以下事情:

xprintf "%d-%.2f" 5 5. // -> "#5-5.00"
xprintf "%A" [42] // -> "#[42]"

那会编译,但我在运行时使用它时会得到let xprintf (format: Printf.StringFormat<'a>) = Printf.StringFormat<'a>(string format |> (+) "#") |> sprintf 。我开始认为这种方法无法奏效。自定义InvalidCastException可以成为现实吗?关于如何在非平凡的层面上与各种格式化程序一起工作的文章/指南似乎非常缺乏。

1 个答案:

答案 0 :(得分:4)

您可以使用services.AddScoped<Data.Interfaces.Company.ICompanyRepository,Data.Repositories.Company.CompanyRepository>(); 执行此操作。它通过延续返回格式化的字符串,这使您可以使用格式化的字符串执行任何操作:

Printf.kprintf

编辑:我认为有一种方法可以直接使用格式字符串,但我从未这样做过。如果你想添加一个额外的参数,你仍然可以使用let xprintf fmt = Printf.kprintf (fun s -> "#" + s) fmt 来做,只需在延续中再做一次格式化:

kprintf