0
因此,我研究了鏡像,他們可能是一種選擇,但考慮到它們的異步特性,它們可能非常難以使用或長期不可行。由於目前還不支持(只是玩遊戲),無論如何它們在這個時候並不是真正可行的。在飛鏢中動態加載課程
問題:給定一系列字符串,例如: [ "Foo", "Bar" ]
基類Application
和library corelib;
Widget
和每個字符串FooWidget
的相應的類,BarWidget
在library applibrary;
,什麼是目前最優雅的方法來獲取Application
把字符串到相應的類的實例,與dart2js工作。
等效PHP僞例如爲清楚起見,
<?php # example
namespace corelib;
class Widget {
function name() {
return \get_called_class();
}
}
class Application {
static function resolve($name, $library) {
$class = $library.'\\'.$name.'Widget';
return new $class;
}
}
namespace applibrary;
class FooWidget extends \corelib\Widget {
// ...
}
class BarWidget extends \corelib\Widget {
// ...
}
$foowidget = \corelib\Application::resolve('Foo', 'applibrary');
$barwidget = \corelib\Application::resolve('Bar', 'applibrary');
echo "{$foowidget->name()} <br> {$barwidget->name()}";
輸出
applibrary\FooWidget
applibrary\BarWidget
擔心,這可能是唯一的出路。我現在實際上使用了一個類似的解決方案(作爲一個停止差距措施),而不是一個開關/函數,我將一個Map傳遞給核心庫中的Environment類,執行'widgetresolver'(這是一個簡單的函數'typedef'),每次給我一個實例。 在鏡子的例子是有辦法使未來同步?整個未來對我來說沒有任何幫助,因爲我不得不讓所有的小部件都等待,以便能夠相互進行交叉計算。 –
srcspider
我喜歡你的解決方案的widgetresolver。這比switch語句更優雅:)。關於讓應用程序等待,無論如何你肯定需要這樣做:FooWidget和BarWidget都需要實例化,然後才能對彼此進行計算。 –
事情是這樣的,因爲我只是實例化一個班級,我不覺得在考慮期貨(在整個應用程序中)浪費的時間有什麼價值。我只想要一個正確類的裸骨頭實例;如果我必須在實例化它之後手動初始化它,那很好。類似於我如何描述現在從「環境」類中獲取實例的類,可以避免大量潛在的複雜邏輯,這種方法可以讓'Widget'類的工廠直接傳遞給我一個實例。這是令人感興趣的,因爲我希望示例中的僞「corelib」是可重用的代碼。 – srcspider