F#:字符串。连接并|>;操作人员
在F#interactive中,我可以成功地使用F#:字符串。连接并|>;操作人员,f#,f#-interactive,F#,F# Interactive,在F#interactive中,我可以成功地使用String.Join(“+”,[“a”;“b”),但是 ["a"; "b"] |> String.Join "+" 产生一个错误: Script1.fsx(79,15): error FS0001: This expression was expected to have type string list -> 'a but here has type string 如何使用String.Join使用管道传
String.Join(“+”,[“a”;“b”)
,但是
["a"; "b"] |> String.Join "+"
产生一个错误:
Script1.fsx(79,15): error FS0001: This expression was expected to have type
string list -> 'a
but here has type
string
如何使用String.Join
使用管道传递集合
另外,同样的问题也存在于
行|>File.writeAllines“filename.txt”
字符串中。Join
是一种.NET方法。使用.NET方法时,F#将其视为一个以元组为参数的函数(调用它时,将参数写为F(a,b)
)。|>
运算符可以与使用参数当前形式的函数一起使用(并且可以通过写入f a b
来调用)
您可以使用F#library中的函数String.concat
(该函数也执行相同的操作):
编辑文件。WriteAllines
的情况相同。如果要将其用作管道的一部分,可以编写一个F#函数来包装调用:
let writeAllLines file (lines:seq<string>) =
System.IO.File.WriteAllLines(file, lines)
。。。但这与管道操作员的通常用法不符。在使用.NET API时,通常最好使用类似C的编程风格(不使用管道),因为管道仅在函数库中才能正常工作。我想我会考虑另一种方法。OP特别询问了String.Join,Tomas Petricek的回答对于该方法是绝对正确的(使用F#library中的String.concat) 如果您正在讨论另一个采用元组参数的方法,但希望将其用作curry,则可以使用以下帮助器函数:
let partial f x y = f(x, y)
这允许您将一个方法传递给“partial”,并返回一个curried函数。像这样使用它:
let partial f x y = f(x, y)
myCollection |> partial String.Join "&"
谢谢顺便说一句,
File.writeAllines
?@modosansreves:我为您的其他问题添加了答案。我认为它必须是(“+”、[|“a”、“b”|])|>System.String.Join,并使用字符串数组。不过这并不重要,它仍然会让我的眼睛流血。@cfern:我认为原作也可以,因为有一个重载需要seq
@Tomas Petricek:IEnumerable重载只出现在.Net 4中(这解释了为什么它在VS2008中对我不起作用)。今天我学到了一些新东西
let partial f x y = f(x, y)
let partial f x y = f(x, y)
myCollection |> partial String.Join "&"