#rust
#Ржавчина
Вопрос:
Есть ли в Rust способ использовать любой текст в качестве имени функции? Что-то вроде:
fn 'This is the name of the function' { ... }
Я нахожу это полезным для тестовых функций, и это разрешено другими языками.
Комментарии:
1. у
test
атрибута нет способа присвоить тесту другое имя2. Из любопытства, какой язык допускает строковые литералы в качестве имен функций?
3. @SvenMarnach функции-члены javascript — это хотя бы одна:
class A { 'a member function'() { } }; let a = new A; a['a member function']()
4. @kmdreko Да, это близко, но вы все равно не можете этого сделать
function 'some string'() {}
в JavaScript, что кажется ближе к тому, что задает здесь OP.5. @SvenMarnach Common Lisp позволяет это, например
(defun foo bar () 42)
, и(foo bar)
вызывать. Это работает благодаря тому, что код определяется в терминах символов, и читатель интерпретирует экранированный пробел как часть символа независимо от контекста. Tcl — еще один пример, не имеющий проблем сproc "foo bar" {} { puts 42 }
и также"foo bar"
(или{foo bar}
что означает то же самое) для вызова.
Ответ №1:
Нет никакого способа. Согласно официальной ссылке:
Идентификатор — это любая непустая строка ASCII следующего вида:
Либо
- Первый символ — это буква.
- Остальные символы являются буквенно-цифровыми или
_
.Или
- Первый символ
_
.- Идентификатор состоит из более чем одного символа.
_
alone не является идентификатором.- Остальные символы являются буквенно-цифровыми или
_
.Необработанный идентификатор похож на обычный идентификатор, но с префиксом
r#
. (Обратите внимание, чтоr#
префикс не включен как часть фактического идентификатора.) В отличие от обычного идентификатора, необработанным идентификатором может быть любое строгое или зарезервированное ключевое слово, кроме перечисленных вышеRAW_IDENTIFIER
.
Ответ №2:
В именах функций не может быть пробелов (и это верно для большинства языков программирования). Обычной практикой для имен функций в Rust является замена пробелов символами подчеркивания, поэтому допускается следующее:
fn This_is_the_name_of_the_function { ... }
хотя в обычной практике используется нижний регистр t