Joa*_*nge 6 .net c# compiler-construction
我问的原因是,它只在方法参数声明中有效,不是吗?我试图在函数体中创建一个名为"params"的变量,但当然这不是什么大问题,只是想知道MS选择使其成为全局关键字而不是上下文的原因.
可以询问任何其他关键字.例如,为什么不是"类"上下文,因为它仅用于类声明?
对我而言,关键字是关键字.我想它大大简化了编译的词法分析部分,而不必是那种情境感知.
另外,您可以使用该@符号来声明一个名为"params"(或任何其他保留关键字)的变量:
var @params = new int[] { 1, 2 };
Run Code Online (Sandbox Code Playgroud)
tvanoffson的回答推测,很难使"params"语境化.它实际上不会那么难.考虑:
void M(params x)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,假设我们首先尝试找到一种类型'params'.如果我们能找到一个,那么,我们已经完成了.如果我们做不到,那么我们有一点问题.假设例如而不是x
void M(params Int32)
Run Code Online (Sandbox Code Playgroud)
显然这是一个错误,但是有什么错误?我们是否应该假设Int32是参数名称并给出错误"你错过了类型"?我们是否应该假设Int32是类型并给出一个错误,说明类型必须是数组类型,并且您缺少标识符?我们是否应该提出错误,说没有名为'params'的类型?这里做什么是正确的?很明显,我们可以找到一些东西,但并不明显.
使用上下文关键字的错误案例很棘手; 让成功案例起作用实际上非常简单.
但实际上,并不是说上下文很难,因为上下文并不是一个真正的大赢家.制作"设置"和"价值"上下文是一个很大的胜利,因为我们假设所有类型的人都想要创建名为"set"和"value"的局部变量."params"甚至不是英文单词,因此似乎不太可能有人想要使用它.使其成为上下文没有大的好处,因此该功能的成本是不合理的.
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |