【发布时间】:2019-02-08 04:16:46
【问题描述】:
我正在阅读这个问题:Decorator functions in Go,我想知道为什么接受答案中示例的执行顺序对我来说似乎相反。
我已将其分解为以下最小示例,我想知道效果是否是由于函数链接造成的。
// Interesting Part
some_string := "Some_String"
var fn3 StringManipulator = ident
fn3 = AppendDecorator(" GOLANG", ToLower(PrependDecorator("DECORATED ", fn3)))
fmt.Println(fn3(some_string))
// Prints "DECORATED some_string golang"
// Function Definitions
func ToLower(m StringManipulator) StringManipulator {
return func(s string) string {
lower := strings.ToLower(s)
return m(lower)
}
}
func AppendDecorator(x string, m StringManipulator) StringManipulator {
return func(s string) string {
return m(s + x)
}
}
func PrependDecorator(x string, m StringManipulator) StringManipulator {
return func(s string) string {
return m(x + s)
}
}
正如代码中提到的,这会产生“DECORATED some_string golang”,表示函数是从左到右执行的,而普通函数是从最内到最外计算的,即从右到左。 [这让我想起了变换矩阵的后乘 - 顺序也是“颠倒的”,即 M_1 * M_2 * M_3] 这是由于函数链接还是什么原因?有人可以帮我详细了解这是如何执行的吗?
提前谢谢你。
【问题讨论】: