我正在创建一个[Iron] Ruby项目,需要支持多个环境(更具体地说,WPF,Silverlight和WinForms - 但这并不重要)。以下是我被困的实际具体例子:
我必须将Bitmap
类作为库的一部分来实现,并且这个类需要根据它运行的环境以不同的方式实现(例如,如果我在浏览器中运行它作为silverlight应用程序,我将无法访问桌面上可用的方法。这是捕获 - 我不控制Bitmap
的实例化,也不控制库中的任何其他类。为什么?因为它是另一个应用程序的端口;虽然我确实有应用程序的代码,但我不想通过更改代码来破坏兼容性。但是,我做,控制应用程序的入口点,所以我可以require
我需要的任何东西,执行设置,配置全局变量等。
编辑:如果你很好奇,这就是我正在研究的项目: http://github.com/cstrahan/open-rpg-maker
这是我想知道的:
以下是我的一些想法,但我相信你会有更好的想法:
require
,如下所示:require silverlight/bitmap
。在这种情况下,lib/bitmap.rb
将为空,而lib/silverlight/bitmap.rb
将包含实现。 或者... 的lib/bitmap.rb
中的所有实现,并根据类实例变量或常量有条件地执行:Bitmap.impl = "silverlight"
。 或者... 的lib/silverlight/bitmap.rb
)。对Ruby非常陌生,我不太熟悉这样的最佳实践(我来自C#)。任何建议将不胜感激!
- 查尔斯