Показать сообщение отдельно
Старый 23.12.2007, 09:32   #2
oxid
Нуждающийся
 
Регистрация: 20.08.2006
Сообщений: 54
Написано 3 полезных сообщений
(для 4 пользователей)
Re: Выкладываем советы

Запись в строку по индексам – sting[2]=78
Одним из недостатков БМ является невозможность индексного доступа к строке для записи, как в массивах. Объяснение, почему Марк не делает нормальный индексный доступ к строкам, а только чтение, меня просто развеселило: он заботится о том, что, если мы передаем строку в функцию, ее там кто-то может изменить. А типа чтобы ее не изменили стопроцентно надо ее копировать, а не передавать через ссылку. А это целых 7 лишних символов каждый раз набирать: ".Copy()". Вопрос а нафик нам вообще надо сохранять строку? Или мы настолько тупы, что не знаем, что пишем? И нам ни за что не известно будет ли функция менять строку или нет? Ппц просто. Я уже молчу про то, что это решается на уровне языка элементарно, и не в одном языке делалось: аргумент функции объявляется как ссылка или как значение. Если ссылка – передаем ссылку на строку и она может быть изменена после работы функции. Если значение – то строка копируется и что там функция будет с ней делать, нас не волнует: у нас оригинал, а там - копия. Все блин. Все давно известно, ничего не надо изобретать и писать лишних 7 символов тоже не надо. Он наверное пропитался духом псевдо-любви к умалишенным в ущерб неумалишенных, так культивируемой в последнее время в США. Хотя это странно - он то не там совсем живет. Марк типо сильно боится дураков-программистов и сильно о них заботится.
Ну мы не дураки, поэтому не только не будем делать глупостей со строками, а даже будем с ними делать то, что нам не дадено, но нужно:
Local p:Int Ptr = Int Ptr(Varptr(str))
Local pchar:Short Ptr = Short Ptr(p[0])
pchar :+ 6'this offset depends on String structure
Вот так в pchar мы получаем указатель на строку - у кого есть желание может оформить это функцией.
А вот и рабочий примерчик:

Local str$ = "Hello"
Print str

Local p:Int Ptr = Int Ptr(Varptr(str))
Local pchar:Short Ptr = Short Ptr(p[0])
pchar :+ 6'this offset depends on String structure

pchar[0]=Asc("H")
pchar[1]=Asc("e")
pchar[2]=Asc(" ")
pchar[3]=Asc("h")
pchar[4]=Asc("e")

Print str
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо oxid за это полезное сообщение:
johnk (16.09.2008), Randomize (10.11.2009)