Scala中用于生成新对象的字符串的模板模式

时间:2011-02-17 13:07:25

标签: ruby scala design-patterns

在Scala中是否可以创建一个字符串,该字符串获取一个类或方法声明的代码,然后执行该代码,然后创建新对象?

以下是ruby代码中的一个示例:

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

您知道我的方法的任何示例或链接吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

当然,你可以通过使用给定的String调用编译器来以某种方式工作,然后你可能需要一个自定义的类加载器。然而,Scala是一种静态语言,因此它永远不会像Ruby或其他动态语言那样方便和优雅。

[编辑]

我从未尝试过,但我找到了这个链接:http://scala-programming-language.1934581.n4.nabble.com/Compiling-a-Scala-Snippet-at-run-time-td2000704.html

答案 1 :(得分:1)

设计模式是为了通过一个通用的解决方案来规避常见问题。在这里,您尝试使用外国设计模式并尝试逐字翻译。要小心,特别是动态语言模式。

特别针对您的问题,Java中的模板模式通常是名为abstract class es的语言结构。在Scala中,您还可以制作abstract class es和trait s。

另一个陷阱,单例设计模式是Scala中的语言构造。

答案 2 :(得分:0)

我不确定您要解决的是哪个更高级别的问题,但我想Scala REPL必须在您以交互方式输入代码行时始终执行此操作。我似乎记得开发人员已经成功地将其与需要动态生成代码的应用程序集成在一起。

然而,正如雷克斯所指出的那样,对于你的潜在问题,可能有更好的解决方案,而不是诉诸这种不稳定,不安全的机制。