在 GoLang 中,可以使用函數作為參數,例如在這個簡單的例子中,根據小于或等于 ( )<=或大于或等于運算符 ( >=)比較兩個數字package mainfunc leq(x, y int) bool { return x <= y}func geq(x, y int) bool { return x >= y}func compare(x, y int, comparator func(int, int) bool) bool { return comparator(x, y)}func main() { println(compare(3, 5, leq)) //true println(compare(5, 3, leq)) //false println(compare(3, 5, geq)) //false println(compare(5, 3, geq)) //true}有沒有辦法將中綴運算符而不是函數作為函數參數?例如:func compare(x, y int, comparator <something here>) bool { return comparator(x, y)}func main() { println(compare(3, 5, <=)) //true println(compare(5, 3, <=)) //false println(compare(3, 5, >=)) //false println(compare(5, 3, >=)) //true}或者我最好的選擇是像第一個例子那樣為運算符編寫包裝器嗎?此外,如果上述情況可行,是否可以將中綴運算符參數與中綴語法一起使用?例如func compare(x, y int, c <something here>) bool { return x c y}
1 回答

慕虎7371278
TA貢獻1802條經驗 獲得超4個贊
不,根據Go 語言規范,這不是一個正確的程序。
函數類型被定義為包含一個參數列表,其中每個參數都包含一個參數聲明:[ IdentifierList ] [ "..." ] Type
。
這要求函數的所有參數都具有類型,指定為 production?Type
,因此:
TypeLit?=?ArrayType?|?StructType?|?PointerType?|?FunctionType?|?InterfaceType?| ??????????SliceType?|?MapType?|?ChannelType
內置操作數(例如相等和比較運算符)是語言內部的,不會在此處公開為可能的類型文字。
此外,函數調用規范要求調用中的參數是單值表達式。二元運算符本身不是表達式。
因此,您不能將“中綴”運算符作為參數傳遞給函數調用。您應該定義自己的接口或函數類型來包裝運算符,并將其傳遞給您的比較函數。
- 1 回答
- 0 關注
- 149 瀏覽
添加回答
舉報
0/150
提交
取消