我经常在互联网上看到各种各样的抱怨,其他人的currying例子并不是currying,但实际上只是部分应用.
我没有找到关于部分应用是什么的合理解释,或者它与currying有何不同.似乎存在普遍的混淆,在某些地方将等效的例子描述为currying,在其他地方描述为部分应用.
有人可以向我提供这两个术语的定义,以及它们如何区别的细节吗?
language-agnostic terminology definition currying partial-application
使用 Entity Framework Core 进行查询时,我使用表达式转换为 DTO 对象,这对于对象和任何子集合都很有效。
一个简化的例子:
模型:
public class Model
{
public int ModelId { get; set; }
public string ModelName { get; set; }
public virtual ICollection<ChildModel> ChildModels { get; set; }
// Other properties, collections, etc.
public static Expression<Func<Model, ModelDto>> AsDto =>
model => new ModelDto
{
ModelId = model.ModelId,
ModelName = model.ModelName,
ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList()
};
}
Run Code Online (Sandbox Code Playgroud)
询问:
dbContext.Models.Where(m => SomeCriteria).Select(Model.AsDto).ToList();
Run Code Online (Sandbox Code Playgroud)
我的问题是试图找到一种方法为非集合的孩子做类似的事情。如果我已添加到我的模型中:
public AnotherChildModel AnotherChildModel { get; set; }
Run Code Online (Sandbox Code Playgroud)
我可以在表达式中添加转换:
public static Expression<Func<Model, ModelDto>> AsDto …Run Code Online (Sandbox Code Playgroud)