变量

    Julia 提供了非常灵活的变量命名策略。变量名是大小写敏感的,且不包含语义,意思是说,Julia 不会根据变量的名字来区别对待它们。 (译者注:Julia 不会自动将全大写的变量识别为常量,也不会将有特定前后缀的变量自动识别为某种特定类型的变量,即不会根据变量名字,自动判断变量的任何属性。)

    1. 1.0
    2. julia> y = -3
    3. -3
    4. julia> Z = "My string"
    5. "My string"
    6. julia> customary_phrase = "Hello world!"
    7. "Hello world!"
    8. julia> UniversalDeclarationOfHumanRightsStart = "人人生而自由,在尊严和权利上一律平等。"
    9. "人人生而自由,在尊严和权利上一律平等。"

    你还可以使用 UTF-8 编码的 Unicode 字符作为变量名:

    在 Julia REPL 和一些其它 Julia 的编辑器中,很多 Unicode 数学符号可以使用反斜杠加 LaTeX 符号接 tab 健打出。例如: 变量名 δ 可以通过 \delta-tab 来输入,甚至可以用 \alpha-tab-\hat-tab-\^(2)-tab来输入 α̂⁽²⁾ 这种复杂的变量名。(如果你在某个地方发现了一个不知道怎么输入的符号,比如在别人的代码里,输入 接着复制那个符号,REPL的帮助功能会告诉你输入方法。)

    1. julia> pi = 3
    2. 3
    3. julia> pi
    4. 3
    5. julia> sqrt = 4
    6. 4

    然而,如果你试图重定义一个已经在使用中的内置常量或函数,Julia 会报错:

    变量名字必须以英文字母(A-Z 或 a-z)、下划线或编码大于 00A0 的 Unicode 字符的一个子集开头。 具体来说指的是,中的 Lu/Ll/Lt/Lm/Lo/Nl(字母)、Sc/So(货币和其他符号)以及一些其它像字母的符号(例如 Sm 类别数学符号中的一部分)。 变量名的非首字符还允许使用惊叹号 !、数字(包括 0-9 和其他 Nd/No 类别中的 Unicode 字符)以及其它 Unicode 字符:变音符号和其他修改标记(Mn/Mc/Me/Sk 类别)、标点和连接符(Pc 类别)、引号和少许其他字符。

    + 这样的运算符也是合法的标识符,但是它们会被特别地解析。 在一些上下文中,运算符可以像变量一样使用,比如 (+) 表示加函数,语句 (+) = f会把它重新赋值。大部分 Unicode 中缀运算符(Sm 类别),像 ,会被解析成真正的中缀运算符,并且支持用户自定义方法(举个例子,你可以使用语句 const ⊗ = kron 定义为中缀的 Kronecker 积)。 运算符也可以使用修改标记、引号和上标/下标进行加缀,例如 +̂ₐ″ 被解析成一个与 + 具有相同优先级的中缀运算符。以下标/上标字母结尾的运算符与后续变量名之间需要一个空格。举个例子,如果 +ᵃ 是一个运算符,那么 +ᵃx 应该被写为,以区分表达式 + ᵃx ,其中 ᵃx 是变量名。

    1. julia> x, ___ = size([2 2; 1 1])
    2. (2, 2)
    3. julia> y = ___
    4. ERROR: syntax: all-underscore identifier used as rvalue

    唯一明确禁止的变量名称是内置关键字的名称:

    某些 Unicode 字符被认为是等效的标识符。不同的输入 Unicode 组合字符的方法(例如:重音)被视为等价的(Julia 标识符采用 标准)。Julia 还加入了一些非标准的等价字符,用于在视觉上相似且易于通过某些输入法输入的字符。Unicode 字符 ɛ (U+025B: Latin small letter open e) 和 µ (U+00B5: micro sign) 被视为等同于相应的希腊字母。点 · (U+00B7) 和希腊字符间断 · (U+0387) 都被当作数学上的点积运算符 (U+22C5)。减号 (U+2212) 与连接号 - (U+002D) 也被视作相同的符号。

    命名规范

    虽然 Julia 语言对合法名字的限制非常少,但是遵循以下这些命名规范是非常有用的:

    • 变量的名字采用小写。
    • 使用下划线('_')来分隔名字中的单词,但是不鼓励使用下划线 除非在不使用下划线时名字会非常难读。
    • 类型 (Type) 和模块(Module)的名字使用大写字母开头,并且用大写字母 而不是用下划线分隔单词。
    • 会对输入参数进行更改的函数要使用 结尾。这些函数有时叫做 “mutating” 或 “in-place” 函数,因为它们在被调用后会修改他们的输入参数的内容 而不仅仅只是返回一个值。