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