第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

指定_(下劃線)變量的位置和方式是什么?

指定_(下劃線)變量的位置和方式是什么?

翻過高山走不出你 2019-09-02 08:51:59
大多數(shù)人都知道_IRB作為最后回報(bào)價(jià)值的持有人的特殊含義,但這不是我在這里要求的。相反,我問的是什么_時(shí)候用作普通舊Ruby代碼中的變量名。在這里它似乎有特殊的行為,類似于“不關(guān)心變量”(àlaProlog)。以下是一些說明其獨(dú)特行為的有用示例:lambda { |x, x| 42 }            # SyntaxError: duplicated argument namelambda { |_, _| 42 }.call(4, 2) # => 42lambda { |_, _| 42 }.call(_, _) # NameError: undefined local variable or method `_'lambda { |_| _ + 1 }.call(42)   # => 43lambda { |_, _| _ }.call(4, 2)  # 1.8.7: => 2                                # 1.9.3: => 4_ = 42_ * 100         # => 4200_, _ = 4, 2; _  # => 2這些都直接在Ruby中運(yùn)行(puts添加了s) - 不是IRB-以避免與其附加功能沖突。這完全是我自己的實(shí)驗(yàn)的結(jié)果,因?yàn)槲覠o法在任何地方找到關(guān)于此行為的任何文檔(不可否認(rèn),這不是搜索最容易的事情)。最后,我很好奇所有這些內(nèi)部是如何工作的,所以我可以更好地理解什么是特別的_。所以我要求提供文檔,最好是Ruby源代碼(也許是RubySpec),它們揭示了_Ruby中的行為。
查看完整描述

2 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

源中有一些特殊處理可以抑制“重復(fù)參數(shù)名稱”錯(cuò)誤。錯(cuò)誤消息只出現(xiàn)在shadowing_lvar_gen內(nèi)部parse.y,1.9.3版本如下所示:


static ID

shadowing_lvar_gen(struct parser_params *parser, ID name)

{

    if (idUScore == name) return name;

    /* ... */

并且idUScore是在定義id.c這樣的:


REGISTER_SYMID(idUScore, "_");

你會看到類似的特殊處理warn_unused_var:


static void

warn_unused_var(struct parser_params *parser, struct local_vars *local)

{

    /* ... */

    for (i = 0; i < cnt; ++i) {

        if (!v[i] || (u[i] & LVAR_USED)) continue;

        if (idUScore == v[i]) continue;

        rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));

    }

}

您會注意到警告在for循環(huán)的第二行被禁止。


_我在1.9.3源代碼中可以找到的唯一特殊處理是:禁止重復(fù)名稱錯(cuò)誤,并禁止使用未使用的變量警告。除了這兩件事之外,_它只是一個(gè)普通的舊變量。我不知道有關(guān)(次要)特殊性的任何文件_。


在Ruby 2.0中,idUScore == v[i]測試輸入warn_unused_var被替換為is_private_local_id:


if (is_private_local_id(v[i])) continue;

rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));

并is_private_local_id禁止以下列開頭的變量發(fā)出警告_:


if (name == idUScore) return 1;

/* ... */

return RSTRING_PTR(s)[0] == '_';

而不僅僅是_自己。所以2.0放松了一些東西。


查看完整回答
反對 回復(fù) 2019-09-02
  • 2 回答
  • 0 關(guān)注
  • 680 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號