Локальные и анонимные классы, а также lambdas, фиксируют локальные переменные по значению при их создании. Поэтому им невозможно ссылаться на себя, захватывая локальную переменную, потому что значение для указания на себя не существует еще в момент их создания.
Код в локальных и анонимных классах может все еще ссылайтесь на себя, используя this
. Однако this
в лямбда не относится к лямбда; он ссылается на this
из внешней области.
Вместо этого вы можете захватить изменчивую структуру данных, например массив:
IntToDoubleFunction[] foo = { null };
foo[0] = x -> { return ( x == 0)?1:x* foo[0].applyAsDouble(x-1);};
, хотя вряд ли это изящное решение.
Я вижу много специфических особенностей командной строки Windows, но если Ваша программа предназначается для Linux, я нахожу стандарт командной строки GNU быть самым обладающим интуицией. В основном это использует двойные дефисы для длинной формы команды (например, --help
) и единственный дефис для короткой версии (например, -h
). Можно также "сложить" короткие версии вместе (например, tar -zxvf
filename
) и смешивание и подгонка, долгое и короткое к содержанию основы.
сайт GNU также перечисляет стандартные имена опции .
getopt библиотека значительно упрощает парсинг этих команд. Если C не Ваша сумка, Python имеет подобную библиотеку, как делает Perl.
Если Вы используете Perl, мой CLI:: платформа Приложения могла бы быть, в чем Вы нуждаетесь. Это позволяет Вам создать приложения с SVN/CVS/GIT как пользовательский интерфейс легко ("Ваша-команда-o - долго - выбирают some-action-to-execute некоторые параметры").
Соглашения, что Вы используете для Вас приложение, зависели бы от телефона
1), Какое приложение это.
2), Какую операционную систему Вы используете. Linux? Windows? У них обоих есть различные соглашения.
то, Что я предложил бы, является взглядом на другие интерфейсы командной строки для других команд в Вашей системе, обращение особого внимания на параметры передало. Наличие неправильных параметров должно дать направленное сообщение об ошибке решения пользователя. Легкое для нахождения экрана справки может помочь в удобстве использования также.
Без знают то, что точно сделает Ваше приложение, трудно дать определенные примеры.
соглашения, что Вы используете для Вас приложение, зависели бы от телефона
1), Какое приложение это. 2), Какую операционную систему Вы используете.
Это определенно верно. Я не уверен в быстрых DOS соглашениях, но в подобных Unix системах общие соглашения примерно:
1) Форматирование
appName параметры
2), Односимвольные параметры (такие как 'x') передаются как-x 3), параметры символа Multi (такие как 'добавлять-ключи) передаются как - добавлять-ключи
Если Вы будете использовать один из стандартных инструментов для генерации интерфейсов командной строки, как getopts, то Вы будете соответствовать автоматически.
- операция [параметры] - команда [Ваша команда]-anotherthings [otherparams]....
, Например,
YourApp.exe -file %YourProject.prj% -Secure true
Дополнение ответа @vonc, не принимайте неоднозначные сокращения. Например:
myCli.exe describe someThing
myCli.exe destroy someThing
myCli.exe des someThing ???
На самом деле, в этом случае, я, вероятно, не признал бы, что сокращение для "уничтожает"...
Вот статья CodeProject, которая могла бы выручить Вас...
Синтаксический анализатор Параметров командной строки C#/.NET
, ЕСЛИ VB является Вашей разновидностью, вот отдельная статья (с немного большим количеством сходных материалов руководства) для проверки...
Синтаксический анализ и Проверяют Параметры Командной строки с VB.NET
Соглашения командной строки варьируются от ОС до ОС, но соглашение, это, вероятно, получило и большую часть использования, и большую часть общественного внимания, является тем, поддерживаемым GNU getopt пакет. См. http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html для большего количества информации
, Она позволяет Вам смешивать однобуквенные команды, такой как - номер, с дольше, самодокументируя опции, такой как - числовой - реверс. Будьте хороши, и реализуйте - справка (-?) опция и затем Ваши пользователи будут в состоянии выяснить все, что они должны знать.
Лучшая вещь сделать, ничего не принимают, если Вы можете. Когда оператор вводит в Вашем имени приложения для выполнения и не имеет никаких параметров, или хит их с блоком ИСПОЛЬЗОВАНИЯ или в альтернативе открывает Windows Form и позволяет им вводить все, в чем Вы нуждаетесь.
c:\>FOO
FOO
USAGE FOO -{Option}{Value}
-A Do A stuff
-B Do B stuff
c:\>
разграничивание Параметра я помещаю в соответствии с заголовком религиозной темы: дефисы (тире), удваивают дефисы, наклонные черты, ничто, позиционное, и т.д.
Вы не указали на свою платформу, но для следующего комментария я приму Windows и .net
, можно создать основанное на консоли приложение в .net и позволить ему взаимодействовать с Настольными Формами использования только путем выбора основанного на консоли проекта, тогда добавляющего Windows. Формы, Система. Рисование, и т.д. DLLs.
Мы делаем это все время. Это гарантирует, что никто не принимает оборот вниз темный переулок.
Одной вещью мне нравится приблизительно определенный CLI, является использование ярлыки .
Т.е., все следующие строки делают то же самое
myCli.exe describe someThing
myCli.exe descr someThing
myCli.exe desc someThing
Тот путь, пользователю не, вероятно, придется ввести всю команду каждый раз.
Если Вы используете попытку C# Моно. GetOptions, это - очень мощный и простой к использованию синтаксический анализатор параметра командной строки. Это работает в Моно средах и с Microsoft.NET Framework.
РЕДАКТИРОВАНИЕ: Вот несколько функций
Я всегда добавляю/? параметр для получения справки и я всегда пытаюсь иметь значение по умолчанию (т.е. наиболее распространенный сценарий) реализация.
Иначе я склонен использовать "/x" для переключателей и "/x:value" для переключателей, которые требуют, чтобы значения были переданы. Делает довольно легким проанализировать параметры с помощью регулярных выражений.