Общая суть заключается в том, что данный вид строк повзоляет использовать символ " без дополнительного траха и позволяет определять рекурсивно вложенные строки (пример этого в том же файле выше).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Общая суть заключается в том, что данный вид строк повзоляет использовать символ " без дополнительного траха и позволяет определять рекурсивно вложенные строки (пример этого в том же файле выше).
А как с циклами бороться? Или со списками?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
VD>>Общая суть заключается в том, что данный вид строк повзоляет использовать символ " без дополнительного траха и позволяет определять рекурсивно вложенные строки (пример этого в том же файле выше).
IT>А как с циклами бороться? Или со списками?
Ничего не понял. Поясните суть вопроса, сэр!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>>>Общая суть заключается в том, что данный вид строк повзоляет использовать символ " без дополнительного траха и позволяет определять рекурсивно вложенные строки (пример этого в том же файле выше).
IT>>А как с циклами бороться? Или со списками?
VD>Ничего не понял. Поясните суть вопроса, сэр!
Как-нибудь можно вывести массив или список через рекурсивное задание подстроки?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Как-нибудь можно вывести массив или список через рекурсивное задание подстроки?
Это просто строки. Они от обычных ничем не отличаются. А вот здесь svn://svn.rsdn.ru/Rsdn2/trunk/Playground/StringTemplate лежит СтрингТемлпэйт который как раз такие вещи позволяет делать (на этой строке основанный). Собственно вот тест от туда:
using System;
using Nemerle.Collections;
using System.Console;
using Nemerle.Utility;
using StringTemplate;
using SCG = System.Collections.Generic;
[Record]
public class Index
{
public Name : string;
public Entries : list[IndexEntry];
}
[Record]
public class IndexEntry
{
public Name : string;
public IsDescend : bool;
}
[StringTemplateGroup]
public class MyTemplateGroup
{
Values : list[string] = ["<Test1>", "<Test2>"];
Value : string = "<Test3>#\n<Test4>#";
Batch(indexs : list[Index]) : string {<#
BEGIN TRAN
..$(indexs; "\ngo\n\n"; CreateIndex)
go
COMMIT TRAN
#>}
CreateIndex(index : Index) : string {<#
..CREATE INDEX $(index.Name)
..(
.. ..$(index.Entries; ",\n"; IndxEntry)
.. {
.. $(TestNewLine())
.. ..$(Values; ";\n");
.. $Value
.. }
..)
..#>}
static TestNewLine() : string
{
def x = "QQQ\nGGG";
x
}
IndxEntry(entry : IndexEntry) : string {<#
$(entry.Name)$(Descend(entry))
#>}
Descend(entry : IndexEntry) : string { if (entry.IsDescend) " DESC"else"" }
public Test1() : void { }
public Test2() : int { 0 }
}
module Program
{
Main() : void
{
def indexs = [
Index("MyIndex1", [IndexEntry("Col1", false), IndexEntry("Col2", true)]),
Index("MyIndex2", [IndexEntry("Column2", false), IndexEntry("Col3", false)]),
];
System.Console.BackgroundColor = ConsoleColor.DarkCyan;
Write(MyTemplateGroup.Batch(indexs));
System.Console.ResetColor();
WriteLine();
Write("...");
_ = ReadLine();
}
}
Выводит:
BEGIN TRAN
CREATE INDEX MyIndex1
(
Col1,
Col2 DESC
{
QQQ
GGG
<Test1>;
<Test2>;
<Test3>#
<Test4>#
}
)
go
CREATE INDEX MyIndex2
(
Column2,
Col3
{
QQQ
GGG
<Test1>;
<Test2>;
<Test3>#
<Test4>#
}
)
go
COMMIT TRAN
...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Общая суть заключается в том, что данный вид строк повзоляет использовать символ " без дополнительного траха и позволяет определять рекурсивно вложенные строки (пример этого в том же файле выше).
убрал трах с символом кавычки — получил трах с символом доллара
Здравствуйте, _pk_sly, Вы писали:
VD>>Общая суть заключается в том, что данный вид строк повзоляет использовать символ " без дополнительного траха и позволяет определять рекурсивно вложенные строки (пример этого в том же файле выше).
__>убрал трах с символом кавычки — получил трах с символом доллара
Можно говорить конкретно? Какая-то ошибка? Опиши, в чем дело.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
не очень-то читабельно.
что будет в следующем уровне вложенности — страшно подумать! а ведь это делается именно ради вложенных строк?
disclaimer: я не хочу сказать что фича — бесполезная или вредная, такой тип вложенных string quotation присутствует во многих языках. но с $-подстановкой тут явно недоработка.
не фатальная, конечно.
Здравствуйте, _pk_sly, Вы писали:
__>>>убрал трах с символом кавычки — получил трах с символом доллара
VD>>Можно говорить конкретно? Какая-то ошибка? Опиши, в чем дело.
__>не ошибка. __>кавычки (или строки) теперь легко сделать любого уровня вложенности. __>только если там отсутствует символ $
$ тут не причем. Внутри строки вложенные <# и #> просто игнорируются. Если кто-то хочет их выделять как подстроки, то он должен длеть это врнуючную. Символ $ же интерпретируется в зависиомости от того является ли строка $-строкой. Если да, то $ внутри строки распознается как спецсимвол. Причем вложенные $<# ни на что не влияют.
__>допустим, я хочу сгенерить через $<#...#>-строку такой код: __>(это из примера) __>
__>def sss = $<#$("qwe")#>;
__>
Такая строка аналогична строке:
"$(\"qwe\")"
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.