编译时的对象创建语法糖可以说我有在斯卡拉
trait fooTrait[T] {
def fooFn(x: T, y: T) : T
}
我想,使用户能够与fooFn自己定义的身体很快宣布fooTrait的新实例。理想情况下,我想要的东西像
val myFoo : fooTrait[T] = newFoo((x:T, y:T) => x+y)
工作。但是,我不能只是这样做
def newFoo[T](f: (x:T, y:T) => T) = new fooTrait[T] { def fooFn(x:T, y:T):T = f(x,y); }
因为它使用闭包,所以当程序运行多次时会导致不同的对象。我真的需要是能够获得通过newFoo返回的对象的classOf,然后有一个是施工的在不同的机器上。我该怎么办?
如果你有兴趣使用的情况下,我试着写Hadoop的Scala的包装,使您可以执行
IO("Data") --> ((x: Int, y: Int) => (x, x+y)) --> IO("Out")
中间的事情需要变成一个类实现一个特定的接口,然后可以在不同的机器上实例化(执行相同的jar文件)而不仅仅是类名。
注意的Scala做正确的事与转换语法糖(X:强度)=> X + 5至功能1的一个实例。我的问题是我是否可以在不攻击Scala内部部件的情况下复制这些内容。如果这是lisp(就像我习惯的那样),这将是一个微不足道的编译时宏...:嗅探:
想要将函数序列化到远程机器吗?通过实例化类“从类名”是什么意思?这个例子中的班级或班级名称是什么? – 2009-10-14 22:34:07
基本上,我想要的是让代码Foo(Int => Int):返回一些东西的字符串。然后,在加载了相同jar文件的另一台机器上,我想在该String上运行Bar(s:String):FooTrait [Int]并让Bar(Foo(fn))返回一个具有fn作为方法的对象。这样做的一个方法是def Foo(obj:FooTrait [Int])= classOf(obj).toString,然后让Bar从类名创建一个新的类实例,但这需要将一个类传递给Foo,而不是拉姆达。 – bsdfish 2009-10-15 19:28:30