Ответ 1
TL; DR
Первоначально я предположил:
Встроенное выражение кажется наиболее вероятным определением для этого токена, основанного на подсказках в исходном коде.
Это оказалось правдой и официально подтверждено документацией Ruby 2.x. Основываясь на обновлениях Ripper documentation, поскольку этот ответ был первоначально написан, кажется, что токен парсера формально определяется как string_embexpr
, а символ сам по себе называется "встроенным выражением". См. Раздел "Обновление для Ruby 2.x" в нижней части этого ответа для подробного подтверждения.
Остальная часть ответа по-прежнему актуальна, особенно для более старых Rubies, таких как Ruby 1.9.3, и методология, используемая для разработки исходного ответа, остается интересной. Поэтому я обновляю ответ, но оставляю основную часть исходного сообщения как есть для исторических целей, хотя текущий ответ теперь может быть короче.
Pre-2.x Ответ на основе Ruby 1.9.3 Исходный код
Связанный ответ
Этот ответ обращает внимание на источник Ruby, который дает многочисленные ссылки на embexpr на всей базе кода. @Phlip предполагает, что эта переменная является аббревиатурой для "EMBedded EXPRession". Это похоже на разумную интерпретацию, но ни источник ruby-1.9.3-p194, ни Google (на момент написания этой статьи) явно не ссылаются на термин встроенное выражение в сочетании с embexpr в любом контексте, связанном с Ruby или нет.
Дополнительные исследования
Сканирование исходного кода Ruby 1.9.3-p194 с помощью
ack-grep -cil --type-add=YACC=.y embexpr .rvm/src/ruby-1.9.3-p194 |
sort -rnk2 -t: |
sed 's!^.*/!!'
отображает 9 файлов и 33 строки с термином embexpr:
test_scanner_events.rb:12
test_parser_events.rb:7
eventids2.c:5
eventids1.c:3
eventids2table.c:2
parse.y:1
parse.c:1
ripper.y:1
ripper.c:1
Особый интерес представляет включение string_embexpr в строку 4,176 из файлов parse.y и ripper.y. Аналогично, TestRipper:: ParserEvents # test_string_embexpr содержит две ссылки на синтаксический анализ # {} на строках 899 и 902 test_parser_events.rb.
Сканер, выполненный в test_scanner_events.rb, также заслуживает внимания. Этот файл определяет тесты в #test_embexpr_beg и #test_embexpr_end, которые просматривают токен # {expr} внутри различных строковых выражений. Тесты ссылаются как на embexpr, так и expr, повышая вероятность того, что "встроенное выражение" действительно является разумным именем для этой вещи.
Обновление для Ruby 2.x
Поскольку этот пост был первоначально написан, документация для стандартной библиотеки Ripper-класса была обновлена, чтобы формально идентифицировать токен. Раздел предоставляет "Hello, #{world}!"
в качестве примера и частично говорит:
В нашем
:string_literal
вы увидите два@tstring_content
, это буквальная часть дляHello,
и!
. Между двумя операторами@tstring_content
есть:string_embexpr
, где embexpr является встроенным выражением.