Оператор запятой:
. определенная для всех типов (встроенная и настраиваемая), и работает следующим образом: exprA , exprB
:
exprA
оценивается exprA
игнорируется exprB
оценивается exprB
возвращается как результат всего выражения . При большинстве операторам, компилятору разрешено выбирать порядок выполнения, и даже требуется пропустить выполнение вообще, если оно не влияет на конечный результат (например, false && foo()
пропустит вызов foo
). Однако это не относится к оператору с запятой, и вышеупомянутые шаги всегда будут выполняться *.
На практике оператор запятой по умолчанию работает почти так же, как точка с запятой. Разница заключается в том, что два выражения, разделенные точкой с запятой, образуют два отдельных оператора, а разделение запятой сохраняет все как одно выражение. Вот почему запятый оператор иногда используется в следующих сценариях:
if( HERE )
for
for ( HERE ; ; )
if (foo) HERE ;
(пожалуйста, не делайте этого, это действительно уродливо!) Когда оператор не является выражением, точка с запятой не может быть заменена запятой. Например, они не разрешены:
(foo, if (foo) bar)
(if
не является выражением) В вашем случае мы имеем:
a=b, c;
, что эквивалентно a=b; c;
, если предположить, что a
имеет тип, который не перегружает a = b, c = d;
, эквивалентный a=b; c=d;
, если предположить, что a
имеет тип, который не перегружает запятую. Обратите внимание, что не каждая запятая на самом деле является оператором запятой. Некоторые запятые, которые имеют совершенно другое значение:
int a, b;
--- список объявлений переменных разделен запятыми, но это не запятые int a=5, b=3;
- - это также список объявления переменных переменной запятой foo(x,y)
--- список аргументов, разделенных запятыми. Фактически, x
и y
могут быть оценены в в любом порядке ! FOO(x,y)
--- список аргументов с разделителями-запятыми foo
--- список аргументов шаблонов разделенных запятыми int foo(int a, int b)
--- список параметров, разделенных запятыми Foo::Foo() : a(5), b(3) {}
--- список инициализаторов, разделенных запятыми, в class constructor * Это неверно, если вы применяете оптимизацию. Если компилятор признает, что определенный фрагмент кода абсолютно не влияет на остальных, он удалит ненужные утверждения.
Дальнейшее чтение: http://en.wikipedia.org/wiki/Comma_operator
Если local.properties файл отсутствует, просто создайте один в папке "проекта/андроида" с 'sdk.dir =/Users/apple/Library/Android/sdk' и удостоверьтесь свой SDK в на том местоположении.
для создания файла с пользовательскими расширениями на Mac отсылают следующую ссылку
, Как я сохраняю TextEdit (Mac) файл с пользовательским расширением (.sas)?
Проблема состоит в том, что Вы неправильно сконфигурировали переменные среды. Необходимо использовать (в Windows) SDK: C:\Users\YOUR_USERNAME\AppData\Local\Android\Sdk
Для получения дополнительной информации: https://Выбор facebook.github.io/react-native/docs/getting-started
: Реагируйте Собственный компонент Быстрый запуск CLI в разделе среды разработки Android в точке 3. Настройте ANDROID_HOME
переменная среды
, Если Вы делаете это, поскольку у Вас есть он прямо сейчас, необходимо настроить каждый проект использовать переменные среды и если проект среди нескольких человек с их оборудованием, это может вызвать проблему. Если Вы делаете это, как я сказал Вам, Вы не должны будете настраивать проект.
Удалите local.properties
из папка андроида в Вашем реагировать проект и попробуйте его.
я сделал это и успешно выполнился.
Если Вам установили студию андроида, просто открываетесь Project/android
использование Studio Android, и это уведомит Вас для переключения пути местоположения SDK в проект.