Does anyone know if there is a builtin function for reading from the console likewise to the printfn
function? The only method I've seen so far is using System.Console.Read()
but it doesn't feel as functional as using a construct like printfn
is.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
It is indeed a shame that there is no such built-in function. However, as Brian mentioned in a comment on Benjol's answer, it is possible to build a scanf
function yourself. Here's a quick sketch of how one might define a sscanf
variant, although only %s
placeholders are implemented:
open System open System.Text open System.Text.RegularExpressions open Microsoft.FSharp.Reflection let sscanf (pf:PrintfFormat<_,_,_,_,'t>) s : 't = let formatStr = pf.Value let constants = formatStr.Split([|"%s"|], StringSplitOptions.None) let regex = Regex("^" + String.Join("(.*?)", constants |> Array.map Regex.Escape) + "$") let matches = regex.Match(s).Groups |> Seq.cast<Group> |> Seq.skip 1 |> Seq.map (fun g -> g.Value |> box) FSharpValue.MakeTuple(matches |> Seq.toArray, typeof<'t>) :?> 't let (a,b) = sscanf "(%s, %s)" "(A, B)" let (x,y,z) = sscanf "%s-%s-%s" "test-this-string"
回答2:
As far as I know, no.
It would be handy for code golf :)
回答3:
Combination of TryParse() and split/regex is what you can use "out of box".
P.S. i've seen http://www.codeproject.com/KB/recipes/csscanf.aspx and it works ;)
转载请标明出处:Read from Console in F#
文章来源: Read from Console in F#