返回信息流Ruby
button.on_click do |obj, event|
puts "You clicked me"
end
Lua
button.connect("clicked", function(obj, ev)
print'You clicked me'
end)
C#
button.clicked += (obj, ev) => {
Console.WriteLine("You clicked me")
};
Python
def on_button_click(obj, event):
print("You clicked me")
button.connect("clicked", on_button_click)
Scala
button.onClick { (obj, event) =>
println("You clicked me")
}
JavaScript
$(".all_buttons").event("clicked", function(event) {
Console.log("You clicked " + this.name)
})
C
void on_button_clicked(object_t *obj, event_t *ev, void *userdata) {
printf("You clicked me\n");
}
connect_event("clicked", on_button_clicked, NULL /* userdata */);
C++
button.on_click([](Object &obj, Event &evt) { cout<<"You clicked me"<<endl; });
Java
button.addEventListener(new ButtonEventAdaptor() { // Why adaptor?
@Override
public void buttonClicked(Object o, EventArgs e) {
System.out.println("You clicked me");
}
});
这是一条镜像帖。来源:北邮人论坛 / java / #26899同步于 2013/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[黑Java系列]累死Java程序员之2: 回调和匿名函数
nuanyangyang
2013/9/18镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我来黑下type erasure
scala> def WhichList[T](list: List[T])(implicit m:Manifest[T]) = m.toString match {
| case "Int" => println("List[Int]")
| case "Double" => println("List[Double]")
| case "java.lang.String" => println("List[String]")
| case _ => println("List[??]")
| }
WhichList: [T](list: List[T])(implicit m: Manifest[T])Unit
scala> val intList = List(1,2,3)
intList: List[Int] = List(1, 2, 3)
scala> val doubleList = List(1.0, 2.0, 3.0)
doubleList: List[Double] = List(1.0, 2.0, 3.0)
scala> val stringList = List("a", "b", "c")
stringList: List[String] = List(a, b, c)
scala> WhichList(intList)
List[Int]
scala> WhichList(doubleList)
List[Double]
scala> WhichList(stringList)
List[String]
scala> List(intList, doubleList, stringList).foreach{ l => WhichList(l) }
List[??]
List[??]
List[??]
// WTF!!!
【 在 iFadeToBlack 的大作中提到: 】
: 我来黑下type erasure
: [code=scala]
: scala> def WhichList[T](list: List[T])(implicit m:Manifest[T]) = m.toString match {
: ...................
话说这个WhichList函数实际上是关于Manifest[T]这个参数的函数吧。函数体中,完全只对m进行操作,根本没有管list。而且这个implicit m参数是编译时(确切地说是类型推导时)编译器提供的,并不是运行时提供的。
而在foreach中,foreach只把l作为参数提供出来,同时编译器认为这个List(intList, doubleList, stringList)的类型是List[List[??]]型,所以foreach提供的l也只是List[??]型的。其实,在foreach中写下WhichList(l)的时候,m就已经被隐含地绑定为List[??]了。这就和运行时List里具体是什么类型的嵌套List没有关系了,放什么都会输出List[??]。
不会objc,帮顶
【 在 lizz 的大作中提到: 】
: 我来添一个(='.'=)
: obj-c
: - (IBAction)button:(id)sender {
: ...................
没错,搓憋的type erasure导致那个T传进去就没了,要使用类型信息还得显式告诉编译器“禽兽,放开那个类型!”
【 在 nuanyangyang 的大作中提到: 】
:
: 话说这个WhichList函数实际上是关于Manifest[T]这个参数的函数吧。函数体中,完全只对m进行操作,根本没有管list。而且这个implicit m参数是编译时(确切地说是类型推导时)编译器提供的,并不是运行时提供的。
: 而在foreach中,foreach只把l作为参数提供出来,同时编译器认为这个List(intList, doubleList, stringList)的类型是List[List[??]]型,所以foreach提供的l也只是List[??]型的。其实,在foreach中写下WhichList(l)的时候,m就已经被隐含地绑定为List[??]了。这就和运行时List里具体是什么类型的嵌套List没有关系了,放什么都会输出List[??]。
: ...................