【问题标题】:Is @ inside razor syntax called operator?剃刀语法中的@是否称为运算符?
【发布时间】:2011-12-06 18:19:49
【问题描述】:

我刚买了一本关于 ASP.NET MVC With Razor View Engine 的书。有一个名为Usage of @ Operator 的小节,这个小节的标题让我……嗯,不舒服

剃刀视图引擎中的@ 是否称为运算符?

更新

我想我的问题不是很清楚。我想知道@ 是否是剃刀视图引擎内的运算符。例如,<>=!=>==> 这些在 C# 语言中被称为运算符。 Razor 视图引擎中的@ 是否相同?

【问题讨论】:

    标签: asp.net asp.net-mvc visual-studio asp.net-mvc-3 razor


    【解决方案1】:

    @ 符号不是运算符,它是指示 razor 语句开始的指示符。

    与php中的<?php ?>相当。这向编译器/解释器指示您的代码在哪里

    例如

    @Html.ActionLink(...)
    

    @(...) 让您有机会在那里进行一些编码 例如

    @(
    int a = 0;
    int b = 4;
    int c = a + b;
    )
    

    希望对你有所帮助

    【讨论】:

    • 可能您没有完全回答所提出的问题(请注意,我也不是暗示我自己的答案是正确的)
    【解决方案2】:

    @ 字符开始内联表达式、单语句块和多语句块。

    Scott Gu's 博客上,他没有将其称为operator,但有很多其他开发人员这样做。就个人而言,我不认为这是operator,而是更多identifier

    【讨论】:

      【解决方案3】:

      根据Razor的官方页面,你可以找到一个例子here,这似乎不是所谓的算子。

      来自链接页面:

      您使用@字符

      向页面添加代码

      (我的重点)

      我还在同一个网站上发现了许多其他页面,所有页面都只引用了“@ 字符”,因此从这个意义上说,它不被视为 运算符

      然而,如果你在Wikipedia on the topic of operators上阅读,那么:

      语法上的运算符通常与函数相反。在大多数语言中,函数可以被视为具有固定优先级和关联性的前缀运算符的一种特殊形式,通常带有强制括号,例如Func(a)(或 LISP 中的 (Func a))。大多数语言支持程序员定义的函数,但不能真正声称支持程序员定义的运算符,除非它们具有多个前缀表示法和多个优先级。 语义运算符可以看作是一种特殊形式的函数,具有不同的调用符号和有限数量的参数(通常为 1 或 2 个)。

      (再次强调)

      那么我认为@ 实际上是一个运算符。它是一个具有特定含义的符号,你可以说你是在“逃离周围的环境去做其他事情”,有点像函数调用。

      换句话说,虽然我目前看到的网站文章中没有出现operator这个词,但我仍然认为它是一个operator。

      意见>

      【讨论】:

        【解决方案4】:

        不,@ 字符不用作运算符。只是那个作者的选择而已。

        例如,在blog post introducing Razor 中,它没有被描述为任何地方的运算符。

        似乎还没有官方或事实上的术语。我个人将其称为标签,因为它与其他标签一起用于标记代码中,并用作<% %> 脚本标签的替代品。

        我想称它为操作符并不是真的不正确,但它并不常用。由于 razor 标记包含 C# 或 VB 代码,也可以包含运算符,因此会让人感到困惑。

        【讨论】:

          【解决方案5】:

          据我所知,像 >、!= 和 && 这样的符号称为相等、关系或条件运算符。 @ 符号似乎不适合任何这些组,所以我必须说,不,它不能称为运算符。但另一方面,它确实表明执行了“某些操作”,这使得它很可能被称为运算符。

          【讨论】:

            【解决方案6】:

            嗯,您指的是 Visual Studio 中“工具”>“选项”对话框的“字体和颜色”部分吗?如果是这样,不,它不是运算符,它是“HTML 服务器端脚本”。 “functions”、“section”等剃须刀特有的关键字也是这种颜色。

            否则,是的,它是技术描述中的运算符。我不完全确定您在寻找什么其他区别。

            【讨论】:

            • 那么,我们用来向页面添加代码的@char 是运算符吗?例如@string.Format.
            • 当然,这是我们在团队中用来指代它的术语。我不知道为什么它叫什么很重要。
            【解决方案7】:

            我认为让您感到不适的原因是 @ token(从解析的角度讨论它时,虽然单词 character 也应该这样做)是重载表示许多不同的情况。让我们看看它们是什么:

            • 向输出写入一个值:

              @this.Value
              
            • 指示代码块转换:

              @{
                  var foo = 1;
                  foo += 1;
              }
              
            • 表示代码语句转换:

              <div>
              @if(foo) {
                   // code
              }
              </div>
              
            • 指示转义到行尾的标记

              @if(foo) {
                  foo = false;
                  @: value printed to output
              }
              
            • 指示指令语句:

              @inherits MyCustomBaseType
              
            • 表示特殊代码块:

              @section Foo {
                  <div />
              }
              
              @helper Bar(int param) {
                  param += 1;
              }
              
            • 分隔注释块:

              @*
                 This is a comment
              *@
              
            • 转义@ 字符:

              Email me at myemail@@example.com
              

            在我看来,只有第一次使用可以被视为运算符。操作数(即 @ 之后的所有其他内容,但不包括第一个标记有效的空白字符)作为参数传递给 Write() 方法。所有其他用法没有任何可明确识别的操作数或需要额外的标记(注释块中的* 等)来识别。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-12
              • 1970-01-01
              • 2012-02-19
              • 1970-01-01
              • 2017-03-30
              • 1970-01-01
              • 1970-01-01
              • 2013-09-17
              相关资源
              最近更新 更多