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

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

Go fmt 為數學表達式生成格式不一致的結果

Go fmt 為數學表達式生成格式不一致的結果

Go
慕斯709654 2023-08-07 14:36:52
我的理解是 go fmt 應該生成可讀且格式一致的代碼。但我認為情況并非如此。我輸入了注釋的代碼,然后 go fmt 返回了未注釋的代碼。為什么它倒塌了0.5*(y3-y0),卻沒有倒塌0.5 * (y2 - y0)?怎樣才算一致呢?而且,在我看來,幾乎所有空間都塌陷的返回線是一場可讀性災難。不一致是一個錯誤嗎?有沒有辦法讓 go fmt 單獨保留某些線路(例如返回線路)?func cubicInterpolate(x, y0, y1, y2, y3 float64) float64 {    // 4-point, 3rd-order Hermite (x-form)    // c0 := y1    // c1 := 0.5 * (y2 - y0)    // c2 := y0 - 2.5 * y1 + 2. * y2 - 0.5 * y3    // c3 := 1.5 * (y1 - y2) + 0.5 * (y3 - y0)    //    // return ((c3 * x + c2) * x + c1) * x + c0    c0 := y1    c1 := 0.5 * (y2 - y0)    c2 := y0 - 2.5*y1 + 2.*y2 - 0.5*y3    c3 := 1.5*(y1-y2) + 0.5*(y3-y0)    return ((c3*x+c2)*x+c1)*x + c0}
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

目的是強制執行布局規則:

gofmt 是一個漂亮的打印機,其目的是強制執行布局規則;它取代了通常允許解釋的“該做和不該做”的概要。

下面是來自go/printer/nodes.go 的格式化摘錄,詳細介紹了格式化規則:

格式化二進制表達式:確定截止值,然后格式化。我們將深度 == 1 稱為普通模式,將深度 > 1 稱為緊湊模式。(Russ Cox 的算法建議。)

優先順序是: ? ? ?5 ? ? ? ? ? ? * ?/ ?% ?<< ?>> ?& ?&^ ? ? ?4 ? ? ? ? ? ? + ?- ?| ?^ ? ? ?3 ? ? ? ? ? ? == ?!= ?< ?<= ?> ?>= ? ? ?2 ? ? ? ? ? ? && ? ? ?1 ? ? ? ? ? ? ||

唯一的決定是第 4 層和第 5 層周圍是否有空格。第 6 層(一元)永遠沒有空格,而第 3 層及以下層始終有空格。

要選擇截止值,請查看整個表達式,但不包括主要表達式(函數調用、帶括號的表達式),并應用以下規則:

  1. 如果存在帶有右側一元操作數的二元運算符,如果沒有空格就會發生沖突,則截止必須是(按順序):

???/*?6???
???&&?6???
???&^?6???
???++?5???
???--?5

(比較運算符周圍總是有空格。)

  1. 如果混合使用 5 級和 4 級運算符,則正常模式下的截止值為 5(使用空格來區分優先級),而緊湊模式下的截止值為 4(從不使用空格)。

  2. 如果沒有 4 級運算符或沒有 5 級運算符,則正常模式下的截止值為 6(始終使用空格),緊湊模式下的截止值為 4(從不使用空格)。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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