scala:指定currying的方法类型

时间:2018-01-27 23:25:30

标签: scala currying

以下方法类型描述了将配置信息和数据传递给方法的函数。这种类型的每种方法都可以执行不同的功能。

  type FTDataReductionProcess =(PipelineConfiguration,RDDLabeledPoint) => RDDLabeledPoint

上述作品有效。

但我想做的是与众不同。我想先将配置添加到方法中,然后再添加数据。所以我需要讨好。

我认为这样可行:

  type FTDataReductionProcess =(PipelineConfiguration)(RDDLabeledPoint) => RDDLabeledPoint

但这会导致编译错误

  

无法解析符号RDDLabeledPoint

任何建议都将不胜感激

1 个答案:

答案 0 :(得分:3)

你想要一个带public async Task<List<string>> PostAsync() { if (Request.Content.IsMimeMultipartContent()) { string uploadPath = HttpContext.Current.Server.MapPath("~/uploads"); MyStreamProvider streamProvider = new MyStreamProvider(uploadPath); await Request.Content.ReadAsMultipartAsync(streamProvider); List<string> messages = new List<string>(); foreach(var file in streamProvider.FileData) { FileInfo fi = new FileInfo(file.LocalFileName); messages.Add("File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)"); } return messages; } else { HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!"); throw new HttpResponseException(response); } } 的函数,并返回另一个带PipelineConfiguration并返回RDDLabeledPoint的函数。

  • 域名是什么? RDDLabeledPoint
  • 什么是返回类型?一个“需要PipelineConfiguration并返回RDDLP”的函数,即:RDDLP

所有在一起:

(RDDLabeledPoint => RDDLabeledPoint)

由于type FTDataReductionProcess = (PipelineConfiguration => (RDDLabeledPoint => RDDLabeledPoint)) 是右关联的,您也可以写:

=>

顺便说一下:同样适用于函数文字,这给出了一个很好的简洁语法。这是一个较短的例子来说明这一点:

type FTDataReductionProcess = 
  PipelineConfiguration => RDDLabeledPoint => RDDLabeledPoint