亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中使用中綴(比較)運算符作為參數

如何在 Go 中使用中綴(比較)運算符作為參數

Go
烙印99 2023-03-29 15:30:38
在 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

內置操作數(例如相等和比較運算符)是語言內部的,不會在此處公開為可能的類型文字。

此外,函數調用規范要求調用中的參數是單值表達式。二元運算符本身不是表達式。

因此,您不能將“中綴”運算符作為參數傳遞給函數調用。您應該定義自己的接口或函數類型來包裝運算符,并將其傳遞給您的比較函數。


查看完整回答
反對 回復 2023-03-29
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號