Существует другой способ делать это, с помощью *.sol, *csproj файлы.
, это будет похоже на это (относительно *.sol файла):
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shani.Commands.Impl", "Shani.Commands.Impl\Shani.Commands.Impl.csproj", "{747CFA4B-FC83-419A-858E-5E2DE2B948EE}"
и просто изменяют первую часть на новый diretory, например:
Impl\Shani.Commands.Impl\Shani.Commands.Impl.csproj
, конечно, не забывают перемещаться, целый проект к тому каталогу
Весело проводят время.
В документации Python это называется Распаковка списков аргументов . Это довольно удобная функция. В Python вы также можете использовать двойную звездочку (**) для распаковки словаря (хеша) в аргументы ключевого слова. Они также работают в обратном направлении. Я могу определить такую функцию:
def sum(*args):
result = 0
for a in args:
result += a
return result
sum(1,2)
sum(9,5,7,8)
sum(1.7,2.3,8.9,3.4)
Чтобы упаковать все аргументы в список произвольного размера.
Типичная терминология для этого называется «применение функции к списку», или для краткости «подать заявку».
См. http://en.wikipedia.org/wiki/Apply
Он был в LISP практически с момента его создания в далеком 1960 году. Рад, что питон открыл это заново: -}
Apply обычно находится в списке или его представлении. как массив. Однако можно применять функции к аргументам, которые происходят из других частей, таких как структуры. Наш ПАРЛАНСКИЙ язык имеет фиксированные типы (int, float, string, ...) и структуры. Как ни странно, список аргументов функции очень похож на структуру определение, а в PARLANSE это определение структуры, и вы можете «применить» функцию PARLANSE к совместимой структуре. Вы также можете "создавать" экземпляры структуры, например:
(define S (structure [t integer] [f float] [b (array boolean 1 3)] )structure )define s (= A (array boolean 1 3 ~f ~F ~f)) (= s (make S -3 19.2 (make (array boolean 1 3) ~f ~t ~f)) (define foo (function string S) ...) (foo +17 3e-2 A) ; standard function call (foo s) ; here's the "apply"
PARLANSE выглядит как лисп, но не является.
В рубине это часто называют «сплат».
Также в рубине вы можете использовать его для обозначения «всех других элементов в списке».
a, *rest = [1,2,3,4,5,6]
a # => 1
rest # => [2, 3, 4, 5, 6]
Это может также появляются по обе стороны от оператора присваивания:
a = d, *e
В этом случае он немного похож на cdr схемы, хотя не обязательно должен быть всем, кроме заголовка списка.
В Haskell это тоже есть (для пар), с функцией uncurry
:
ghci> let f x y = 2*x + y
f :: (Num a) => a -> a -> a
ghci> f 1 2
4
ghci> f 10 3
23
ghci> uncurry f (1,2)
4
ghci> uncurry f (10,3)
23
Вы также можете превратить ее в оператор, чтобы он был более похож на splat:
ghci> f `uncurry` (1,2)
4
ghci> let (***) = uncurry
(***) :: (a -> b -> c) -> (a, b) -> c
ghci> f *** (10,3)
23
И хотя было бы легко определить аналогичные функции для случаев с тремя, четырьмя кортежами и т. Д., Для n
наборов общей функции нет (например, splat работает на других языках ) из-за строгой типизации Haskell.
Руби называет это splat , хотя Дэвид Блэк также придумал изящный унарный {, ra} y-оператор (то есть унарный оператор unarray )
Я называл это «расширением списка», но я не думаю, что это стандартная терминология (я не думаю, что есть ...). Lisp во всех версиях (включая Scheme), а также Haskell и другие функциональные языки могут сделать это достаточно легко, но я не думаю, что это легко сделать на «основных» языках (может быть, вы можете сделать это как «рефлексию» в некоторых! -).
На большинство вопросов уже даны ответы, но что касается вопроса «Как называется оператор *?», Технический термин - «звездочка» (происходит от латинского слова asteriscum , что означает «маленькая звездочка», что, в свою очередь, происходит от греческого ἀστερίσκος ). Однако часто его называют «звездой» или, как указано выше, «сплатом».