Mat*_*man 10 c# ruby haskell language-design
在智能引号和编程语言之间进行类比时,我想到打开和关闭分隔符的不同字符可能不是必需的,而只是可读性的选择.
例如,Ruby的匿名函数中的参数使用相同的管道来打开和关闭.Haskell使用极端偏见的白色空间.
如果不同的我不问类型的分隔符是必要的-为索引括号,括号为块-但无论是独特的打开和关闭括号(如(和))是语法上是必须的大多数语言,或只是设计者的偏好.
Nor*_*sey 10
在语法上不是必需的,但如果打开和关闭分隔符是相同的,则使得嵌套事物变得困难(或不可能).图表A是POSIX shell,其中
var=`command`
Run Code Online (Sandbox Code Playgroud)
被替换为
var=$(command)
Run Code Online (Sandbox Code Playgroud)
正是因为具有相同开始和结束分隔符的代码不会嵌套.
在C和C++中,裸大括号可以嵌套,并打开嵌套的词法范围:
{
int a = 42;
{
int a = 24;
{
printf("%d\n", a); // prints 24
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用相同的分隔符,这是不明确的:
|
int a = 42;
|
int a = 24;
| // Is this an open or close pipe?
printf("%d\n", a); // 24? 42?
| // could be a pair
| // of open+close
|
Run Code Online (Sandbox Code Playgroud)
鉴于C语法规则的普遍存在,可能会有许多其他类似问题的语言(perl,for one).