Шаблон для строк в Scala для создания новых объектов - PullRequest
0 голосов
/ 17 февраля 2011

Возможно ли в Scala создать строку, которая получает код объявления класса или метода, который затем будет выполнен и после этого будут созданы новые объекты?

Вот пример в коде ruby:

"class #{name}; def #{method_name}; \"#{block.call}\"; end; end"

Знаете ли вы какие-либо примеры или ссылки для моего подхода?

Спасибо за вашу помощь!

Ответы [ 3 ]

4 голосов
/ 17 февраля 2011

Конечно, вы можете заставить это как-то работать, вызвав компилятор с заданной строкой, и тогда вам, вероятно, понадобится пользовательский загрузчик классов.Однако Scala является статическим языком, поэтому он никогда не будет таким удобным и элегантным, как в Ruby или других динамических языках.

[Edit]

Я никогда не пробовал, но нашел эту ссылку:http://scala -programming-language.1934581.n4.nabble.com / Компиляция-а-Scala-Сниппет-на-Run-Time-td2000704.html

1 голос
/ 17 февраля 2011

Шаблоны проектирования созданы для того, чтобы обойти общую проблему с помощью общего решения. Здесь вы пытаетесь использовать шаблон внешнего дизайна и пытаться перевести его слово в слово. Будьте осторожны, особенно с динамическими шаблонами языка.

Специально для вашего вопроса шаблон шаблона в Java обычно является языковой конструкцией с именем abstract class es. В Scala вы также можете сделать abstract class es и trait s.

Еще одна ловушка - шаблон проектирования синглтона - это языковая конструкция в Scala.

0 голосов
/ 17 февраля 2011

Я не уверен, какую проблему более высокого уровня вы пытаетесь решить, но я думаю, что Scala REPL должен делать это все время, когда вы вводите строки кода в интерактивном режиме. Мне кажется, разработчики успешно интегрировали это с приложениями, которые должны генерировать код динамически.

Однако, как отмечает Рекс, возможно, есть более эффективные решения вашей основной проблемы, чем использование небрежных, небезопасных механизмов, таких как этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...