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

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