Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#:字符串。连接并|>;操作人员_F#_F# Interactive - Fatal编程技术网

F#:字符串。连接并|>;操作人员

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使用管道传

在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
使用管道传递集合


另外,同样的问题也存在于
行|>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 "&"