2 回答

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放松了一些東西。
- 2 回答
- 0 關(guān)注
- 680 瀏覽
添加回答
舉報(bào)