什么是语言环境

电脑教程022

什么是语言环境,第1张

程序的语言环境是应用程序的一个重要概念。语言环境是指当地语言环境的显式模型和定义。ANSI C 语言标准的库定义中明确定义并包含了语言环境的概念。一个语言环境包括许多种类,对于这些种类,存在与国家/地区有关的格式设置或其他规范。一个程序的语言环境对程序的编码集、日期和时间格式设置惯例、货币惯例、十进制格式设置惯例和排序顺序进行定义。语言环境可以由基本语言、使用国家(地区)和可选的编码集组成。通常采用代码集。例如,德语是 de(Deutsch 的缩写),而瑞士德语是 de_CH(CH 是 Confederation Helvetica 的缩写)。这种转换使得能够区分国家/地区之间的特定差异,如货币单位表示法。一个特定语言可以与多个语言环境相关联,这使得能够区分地区间的差异。例如,美国的英语用户可以选择 en_US 语言环境(美国英语),而英国的英语用户可选择 en_GB(英国英语)。语言环境名称通常由 LANG 环境变量指定。语言环境种类从属于 LANG,但也可单独设置,这时它们将覆盖 LANG。如果设置了 LC_ALL 操作数,则它会覆盖 LANG 和所有不同的语言环境种类。语言环境命名惯例如下:语言[_地区][.代码集] [@modifier]其中,双字母语言代码来自 ISO 639,并且双字母地区代码来自 ISO 3166,代码集是在此语言环境中使用的代码集的名称,而修饰符是将此语言环境与不带此修饰符的语言环境相区分的特征名称。所有 Solaris 产品语言环境都保留了具有 US-ASCII 代码值的可移植字符集 (PCS) 字符。有关可移植字符集的更多信息,请参考“X/Open CAE 规范:系统接口定义,第 5 期”(ISBN 1-85912-186-1)。一个语言环境可以有多个语言环境名称。

程序开发中环境就是程序运行的条件,只有满足条件时候逻辑代码才有用的环境。

引用一个叫 var 的自由名字(指在任何层级都未被声明的名字) 在句法上都被翻译为 _ENV.var 。 此外,每个被编译的 Lua 代码块都会有一个外部的局部变量叫 _ENV , 因此,_ENV 这个名字永远都不会成为一个代码块中的自由名字。

在转译那些自由名字时,_ENV 是否是那个外部的局部变量无所谓。 _ENV 和其它你可以使用的变量名没有区别。 这里特别指出,你可以定义一个新变量或指定一个参数叫这个名字。 当编译器在转译自由名字时所用到的 _ENV , 指的是你的程序在哪个点上可见的那个名为 _ENV 的变量。 (Lua 的可见性规则

被 _ENV 用于值的那张表被称为 环境。

Lua 保有一个被称为 全局环境 特别环境。它被保存在 C 注册表 ()的一个特别索引下。 在 Lua 中,全局变量 _G 被初始化为这个值。 (_G 不被内部任何地方使用。)

当 Lua 加载一个代码块,_ENV 这个上值的默认值就是这个全局环境 。 因此,在默认情况下,Lua 代码中提及的自由名字都指的全局环境中的相关项 (因此,它们也被称为 全局变量 )。 此外,所有的标准库都被加载入全局环境,一些函数也针对这个环境做操作。 你可以用 load (或 loadfile)加载代码块,并赋予它们不同的环境。 (在 C 里,当你加载一个代码块后,可以通过改变它的第一个上值来改变它的环境。)

在转译那些自由名字时,_ENV 是否是那个外部的局部变量无所谓。 _ENV 和其它你可以使用的变量名没有区别。 这里特别指出,你可以定义一个新变量或指定一个参数叫这个名字。 当编译器在转译自由名字时所用到的 _ENV , 指的是你的程序在哪个点上可见的那个名为 _ENV 的变量。 (Lua 的可见性规则

被 _ENV 用于值的那张表被称为 环境。

Lua 保有一个被称为 全局环境 特别环境。它被保存在 C 注册表 ()的一个特别索引下。 在 Lua 中,全局变量 _G 被初始化为这个值。 (_G 不被内部任何地方使用。)

当 Lua 加载一个代码块,_ENV 这个上值的默认值就是这个全局环境 。 因此,在默认情况下,Lua 代码中提及的自由名字都指的全局环境中的相关项 (因此,它们也被称为 全局变量 )。 此外,所有的标准库都被加载入全局环境,一些函数也针对这个环境做操作。 你可以用 load (或 loadfile)加载代码块,并赋予它们不同的环境。 (在 C 里,当你加载一个代码块后,可以通过改变它的第一个上值来改变它的环境。