LINUX.ORG.RU

[F#] let -> lvalue = rvalue


0

1

как наименее болезненно(без fslex/yacc желательно) сделать так, чтобы можно было писать a = b вместо let a = b. Причём в пределах одного модуля, где гарантированно известно что оператор «=» не будет использоваться ни в каких других случаях.

Что-то много фшарпистов набежало, в MonoDevelop плагин, наконец-то, запилили?

O02eg ★★★★★
()

Подозреваю, что средствами язка никак. Просто потому что = вне let это оператор сравнения.

Но можешь использовать

sed -i 's/\([[:alnum:][:punct:]]\+[[:space:]]\+=\)/let \1/' source_files_list

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

думал над этим, но хочется сделать покрасивее.

В F# можно все операторы перегружать, но тут надо ещё во внешнее окружение как-то привязку протаскивать ну или пытаться использвать динамические переменные, если они там есть... я надеялся что ктонить пример кинет, чтобы самому не копаться :)

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

Я думаю, что это нереально сделать средствами F#. Т.к. единственный способ манипулировать значениями операторов - quotaions и потом разбирать AST-выхлоп компилятора. Но если ты не будешь делать let привязки, то компилятор не сможет переварить имена переменных.

Самый простой способ - препроцессор, который будет пробегаться по файлам перед компиляцией и генерить тебе валидный F# код. Думаю это можно сделать на regex'ах довольно легко. Если юзаешь VS, то там есть Build-event: Pre-build command line, куда это и можно засунуть.

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

Т.к. единственный способ манипулировать значениями операторов

Я в том смысле, что тебе надо добавлять в код let-привязку, а возможность сделать это без изменения AST как-то сомнительна.

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