我仍然不清楚这两个定义之间的区别:
val foo = (arg: Type) => {...}
def(arg:Type) = {...}
据我了解:
1)val版本绑定一次,在编译时
创建单个Function1实例
可以作为方法参数传递
2) def 版本在每次调用
创建的每个调用新方法实例上重新绑定。
如果上述情况属实,那么在要执行的操作不依赖于运行时状态的情况下,为什么还要选择 def 版本呢?
例如,在 servlet 环境中,您可能想要获取连接客户端的 IP 地址;在这种情况下,您需要使用 def 作为,当然在编译时没有连接的客户端。
另一方面,您通常在编译时知道要执行的操作,并且可以使用不可变的val foo = (i: Type) => {...}
那么根据经验,应该只在存在运行时状态依赖时才使用 defs 吗?
感谢您的澄清