Scala支持類似動態屬性的東西嗎?例如:Scala中的動態屬性
val dog = new Dynamic // Dynamic does not define 'name' nor 'speak'.
dog.name = "Rex" // New property.
dog.speak = { "woof" } // New method.
val cat = new Dynamic
cat.name = "Fluffy"
cat.speak = { "meow" }
val rock = new Dynamic
rock.name = "Topaz"
// rock doesn't speak.
def test(val animal: Any) = {
animal.name + " is telling " + animal.speak()
}
test(dog) // "Rex is telling woof"
test(cat) // "Fluffy is telling meow"
test(rock) // "Topaz is telling null"
從我們可以在Scala中獲得的最接近的東西是什麼?如果有像「addProperty」這樣允許像普通字段一樣使用添加屬性的東西,那就足夠了。
我對結構類型聲明(「類型安全鴨子打字」)不感興趣。我真正需要的是在運行時添加新的屬性和方法,以便該對象可以被期望添加的元素存在的方法/代碼使用。
我認爲「黃玉告訴無效」是一個很好的跡象,爲什麼應該儘可能避免這種事情。呃,我的意思是,woof。 – 2011-03-20 03:49:12
我同意。這只是一個例子。在現實世界中,我將使用它從JSON或XML讀取域對象,並且如果屬性不存在,我不希望它失敗,也不想編碼一些if或條件代碼。下次我會嘗試一個更好的例子。 – fernacolo 2011-03-20 13:56:04