2015-07-16 2 views
1

Я использую пф как аббревиатуру printfnКак я могу заменить printfn с Ноопом

let pf = printfn 

// signature: 
val pf : (Printf.TextWriterFormat<'a> -> 'a) 

Может ли мы изменить пф, так что это Noop и не выводит ничего? Я пытался что-то вроде

let pf<'a> (x : (Printf.TextWriterFormat<'a> -> 'a)) =() 

// signature: 
val pf : (Printf.TextWriterFormat<'a> -> 'a) 
+0

Этот вопрос со вчерашнего дня довольно похож: https://stackoverflow.com/questions/31442608/how-to-wrap-sprintf-condition-in-f –

+0

Угадайте, что вы правы, впихнете в это, thx. – citykid

+0

Вы можете перенаправить stdout на [Stream.Null] (https://msdn.microsoft.com/en-us/library/system.io.stream.null (v = vs.110) .aspx). Это немного тяжело, хотя и неуместно, если у вас есть другой выход, который вы не хотите подавлять. – phoog

ответ

1

Как насчет:

> let noprintf f = Printf.ksprintf (fun _ ->()) f;; 
val noprintf : f:Printf.StringFormat<'a,unit> -> 'a 

> noprintf "Hello, %s!" "world";; 
val it : unit =() 
> 
+0

очень элегантный. единственное, что noprintf не является noop, а функцией, которая не производит вывода, в то время как усилия по форматированию все еще происходят до усечения. Это решение по-прежнему снижает время выполнения до менее 1%. спасибо – citykid

0

Вот простое решение

let pf fstring = 
    if false then 
     printfn fstring 
    else 
     fun _ -> Operators.Unchecked.defaultof<'a>;; 

Примечание: это действительно есть некоторые проблемы и не будут работать во всех случаях - см комментарии

+2

-1. У этого есть 2 проблемы - 1. он даже не компилируется, если ваша строка формата не имеет слотов формата (например, 'pf" foo bar "'). 2. Он взорвется нулевым символом, если ваша строка формата имеет более 1 слот (например, 'pf"% d% d "1 2'). Я боролся с теми же проблемами, когда выяснял [этот ответ] (http://stackoverflow.com/a/31444585/1366219) – latkin

+0

выглядит как умная оценка. выполнение pf «% s% d» «bugs bunny» 15 выдает исключение null ref. попытается уточнить ваше предложение. thx – citykid

Смежные вопросы