มีคำตอบที่ดีอื่น ๆ ที่นี่ แต่ฉันเชื่อว่าตัวอย่างนี้ (ตามความเข้าใจของฉัน) ใน Java อาจเป็นประโยชน์กับบางคน:
public static <A,B,X> Function< B, X > partiallyApply( BiFunction< A, B, X > aBiFunction, A aValue ){
return b -> aBiFunction.apply( aValue, b );
}
public static <A,X> Supplier< X > partiallyApply( Function< A, X > aFunction, A aValue ){
return () -> aFunction.apply( aValue );
}
public static <A,B,X> Function< A, Function< B, X > > curry( BiFunction< A, B, X > bif ){
return a -> partiallyApply( bif, a );
}
ดังนั้นการแกงจึงช่วยให้คุณมีฟังก์ชั่นหนึ่งอาร์กิวเมนต์เพื่อสร้างฟังก์ชั่นโดยที่บางส่วนของแอปพลิเคชันจะสร้างฟังก์ชั่น wrapper ที่โค้ดยาก ๆ อย่างน้อยหนึ่งอาร์กิวเมนต์
หากคุณต้องการคัดลอกและวางข้อมูลต่อไปนี้เป็นเสียงที่น่าฟัง แต่เป็นมิตรกับการทำงานเนื่องจากมีความผ่อนปรนมากกว่า:
public static <A,B,X> Function< ? super B, ? extends X > partiallyApply( final BiFunction< ? super A, ? super B, X > aBiFunction, final A aValue ){
return b -> aBiFunction.apply( aValue, b );
}
public static <A,X> Supplier< ? extends X > partiallyApply( final Function< ? super A, X > aFunction, final A aValue ){
return () -> aFunction.apply( aValue );
}
public static <A,B,X> Function< ? super A, Function< ? super B, ? extends X > > curry( final BiFunction< ? super A, ? super B, ? extends X > bif ){
return a -> partiallyApply( bif, a );
}