Оператор разрешения области
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2018 г. ) |
В программировании компьютерном область действия — это охватывающий контекст, в котором значения и выражения связаны . Оператор разрешения области помогает идентифицировать и указать контекст, на который ссылается идентификатор , в частности, путем указания пространства имен или класса . Конкретные варианты использования различаются в разных языках программирования с учетом понятий области действия. Во многих языках оператор разрешения области написан ::
.
В некоторых языках, особенно в тех, на которые влияет Modula-3 (включая Python и Go ), модули являются объектами , а разрешение области внутри модулей является особым случаем обычного доступа к членам объекта, поэтому обычный оператор метода .
используется для разрешения области. Другие языки, особенно C++ и Ruby , поддерживают как разрешение области видимости, так и доступ к методам, которые взаимодействуют по-разному; см. примеры ниже.
С++
[ редактировать ]class A {
public:
static int i; // scope of i is A
};
namespace B {
int c = 2;
} // namespace B
int A::i = 4; // scope operator refers to the integer i declared in the class A
int x = B::c; // scope operator refers to the integer c declared in the namespace B
PHP
[ редактировать ]В PHP оператор разрешения области также называется Paamayim Nekudotayim ( на иврите : двойное двоеточие , произносится [paʔamajim nekudoˈtajim] , второе слово представляет собой разговорное искажение произносится [некудатаджим] ), что на иврите означает «двойное двоеточие ».
Название «Паамаим Некудотаим» было введено в разработанный Израилем [1] Zend Engine 0.5, используемый в PHP 3 . Хотя это сбивает с толку многих разработчиков, не говорящих на иврите, оно все еще используется в PHP 7, как показано в этом примере сообщения об ошибке:
$ php -r ::
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
Подобная ошибка также может возникнуть, если оператор разрешения области отсутствует. Например, попытка проверить, является ли константа пустой(), вызывает следующую ошибку:
$ php -r 'define("foo", "bar"); if (empty(foo)) echo "empty";'
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
Начиная с PHP 5.4, сообщения об ошибках, связанные с оператором разрешения области, по-прежнему включают это имя, но его значение несколько прояснено:
$ php -r ::
Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
Существуют и другие менее очевидные способы вызвать ошибку, например, попытка использовать следующее недопустимое выражение PHP:
$ php -r static const '$a=1'
Parse error: syntax error, unexpected end of file, expecting :: (T_PAAMAYIM_NEKUDOTAYIM)
Руби
[ редактировать ]В Ruby разрешение области можно указать с помощью ключевого слова модуля.
module Example
Version = 1.0
class << self # We are accessing the module's singleton class
def hello(who = "world")
"Hello #{who}"
end
end
end #/Example
Example::hello # => "Hello world"
Example.hello "hacker" # => "Hello hacker"
Example::Version # => 1.0
Example.Version # NoMethodError
# This illustrates the difference between the message (.) operator and the scope operator in Ruby (::)
# We can use both ::hello and .hello, because hello is a part of Example's scope and because Example
# responds to the message hello.
#
# We can't do the same with ::Version and .Version, because Version is within the scope of Example, but
# Example can't respond to the message Version, since there is no method to respond with.
На область действия также влияют символы , которые предшествуют именам переменных:
- "
$
"- глобальная переменная - "
@
" - переменная экземпляраself
- "
@@
"- переменная класса - Нет символа, нижнего регистра или подчеркивания — локальная переменная или метод
- Нет сигилы, верхний регистр - константа
Ссылки
[ редактировать ]- ^ «Оператор разрешения масштаба» . Руководство по PHP 5 . Проверено 9 августа 2007 г.