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

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

將變量傳遞給回調函數

將變量傳遞給回調函數

Go
aluckdog 2023-07-31 15:14:26
selector是將變量傳遞給回調函數的方法嗎?for _, selector := range listSelector {    c.OnHTML(selector, func(e *colly.HTMLElement) {        fmt.Println(selector) // Similar outputs    })}預期結果是輸出的不同選擇器。謝謝。
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

根據回調執行的時間,您可能需要在塊內創建迭代變量的副本并在閉包中使用它。


for _, selector := range listSelector {

? ? sel := selector // create a copy

? ? c.OnHTML(sel, func(e *colly.HTMLElement) {

? ? ? ? fmt.Println(sel) // Similar outputs

? ? })

}

如果回調被執行并且它在循環中的下一次迭代之前退出,則不需要執行此操作,但是如果稍后執行回調,則需要將迭代變量的副本傳遞給閉包。這是因為迭代變量被重用來保存迭代的值,這意味著當前迭代中的變量值將被下一次迭代中的值覆蓋。


從規格來看:

迭代變量可以通過“range”子句使用短變量聲明(:=)的形式來聲明。在這種情況下,它們的類型設置為各自迭代值的類型,并且它們的范圍是“for”語句的塊;它們在每次迭代中都被重復使用。如果迭代變量在“for”語句之外聲明,則執行后它們的值將是最后一次迭代的值。

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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