LINUX.ORG.RU
Ответ на: комментарий от moroz

Если речь про array, то нельзя

Да, речь про array. Есть общепринятый способ возвратить его? Пока что я нашел только array get и array set.

/me .oO( что за умственно отсталые наркоманы проектировали этот язык ).

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

/me .oO( что за умственно отсталые наркоманы проектировали этот язык ).

У меня стойкое ощущение, что синтаксис и общую идею проектировал один чувак, а набор стандартных функций и прочую семантику придумывал другой. Ну или если один и тот же, то он находился в сильно изменённых состояниях сознания.

Вроде хотели сделать что-то хорошее, а получилось «что за умственно отсталые наркоманы проектировали этот язык».

Deleted
()
Ответ на: комментарий от Deleted

Просто этот язык не для быдла.

anonymous
()
Ответ на: комментарий от buddhist

Не используй array.

Есть еще какие-то проблемы?

Используй dict.

И писать [array get aname key] вместо aname(key)? Думаю, проще конвертировать значения при возврате.

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Array - это не переменные, поэтому с ними работа по-другому происходит. upvar - это вполне нормальная для тикля конструкция, ей и надо пользоваться.

Если хочется массивов как значений, надо dict использовать.

moroz
()
Ответ на: комментарий от tailgunner

array вообще несколько «чужерожная» штуковина.

писать [array get aname key] вместо aname(key)

Так в тикле обычно и делают

«How to pass arrays» на вики изучил?

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

писать [array get aname key] вместо aname(key)

Так в тикле обычно и делают

/me .oO( кругом норкоманы )

Я простой нуб и люблю синтаксический сахар.

«How to pass arrays» на вики изучил?

Ознакомился поверхностно.

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Да ладно, Тикль - вполне нормальный язык, просто не совсем стандартный. К нему привыкнуть нужно. Ошибочно воспринимать его как Питон/Перл/Руби/Жабаскрипт с другим синтаксисом.

moroz
()
Ответ на: комментарий от tailgunner

Тебе дело говорят. Используй dict вместо массивов.

Я простой нуб и люблю синтаксический сахар.

Сахара в тикле нет.

Deleted
()

Никак нельзя это сделать. Используй дикт или передавай в процедуру имя массива там выхватывай его и изменяй (типа по ссылке).

Suntechnic ★★★★★
()
Ответ на: комментарий от Suntechnic

передавай в процедуру имя массива там выхватывай его и изменяй (типа по ссылке).

Это что - общепринятая и благословленная Остерхаутом пратика?

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

На самом деле массив это не список. А Tcl умеет только в списки. Отсюда растут ноги. dict - это список. Просто tcl умеет с ним хитро работать, поэтому dict можно.

Suntechnic ★★★★★
()
Ответ на: комментарий от tailgunner

Не знаю. Я и так и так делаю. Т.е. и с upvar и изменением полученного массива и возвращая список. Первое использую когда везде нужен именно массив, а второе когда с upvar могут возникнуть проблемы. Т.е. будет неясно на сколько уровней в реальности подняться надо.

Suntechnic ★★★★★
()

return [array get $name]

array set name [yourproc...]

sdio ★★★★★
()
Ответ на: комментарий от fopen

ЛПП. Вот два кусочка сахара: $ и {*}

А как получить результат {*} без него? Ну переменные понятно [set var] вместо $var

Xenius ★★★★★
()
Ответ на: комментарий от fopen

У eval и {*} разные эффекты: первый исполняет кусок кода, а второй только разбивает на слова. Впрочем вроде subst тоже так делает

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

Конечно, разные. В этом и был весь ужас ситуации. Ради простой подстановки дергать великий и ужасный eval! Было:

eval destroy [winfo children .]
Стало:
destroy {*}[winfo children .]

fopen ★★
()
Ответ на: комментарий от fopen

Кстати, возвращаясь к начальной теме, tailgunner не единственный, кто хочет так запросто передавать массивы в/из proc. Возможно в 9.0 кто-нибудь осилит подсластить это место.

fopen ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.