Как я могу использовать произвольный текст в качестве имени функции в Rust?

#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