Scala:绑定时间

缬草素

在策略模式中,实现方式如下:

object StrategyPattern {

  def add(a: Int, b: Int) = a + b
  def subtract(a: Int, b: Int) = a - b
  def multiply(a: Int, b: Int) = a * b

  def execute(callback:(Int, Int) => Int, x: Int, y: Int) = callback(x, y)

def main(args: Array[String]) {
  println("Add:      " + execute(add, 3, 4))
  println("Subtract: " + execute(subtract, 3, 4))
  println("Multiply: " + execute(multiply, 3, 4))
  }
}

我想知道(如果对绑定时间的类型/形式有很好的参考,那么还要了解其他情况),如果方法的绑定时间add, substract, and multiply"construction time"(如果可以这样说的话)还是在runtime

亚伦·诺夫斯特鲁普(Aaron Novstrup)

简单的答案是(对于具体的类)方法定义在编译时绑定到方法名称,就像在Java中一样。add例如,您的方法完全等效于以下Java定义:

public int add(int a, int b) {
    return a + b;
}

非最终方法

如果您从无法静态了解具体类的调用站点的角度分析非最终方法的绑定时间,则该方法名称将被视为具有对其实现的运行时绑定(由于子类/覆盖)。

动态类加载

简单的答案很接近事实,但是JVM中的动态类加载使事情变得有些复杂。由于动态的类加载,方法定义在技术上my.pkg.StrategyPattern.add在运行时绑定到完全限定的名称(例如)。当然,可以有一个my.package.StrategyPattern模块的替代实现,并可以从中动态选择(通过加载相应的类文件)。

当然,这种区别仅与包含该StrategyPattern定义的编译单元外部的代码有关在编译单元内,方法总是会在编译时绑定。

战略

既然您在询问策略模式,那么我想您还有其他想法吗?如果您询问是否可以在运行时在“策略”中进行选择,则可以:

val op: (Int, Int) => Int = 
  if (args(0) == "+") add
  else if (args(0) == "-") subtract
  else multiply
execute(op, 3, 4)

在这种情况下,op被绑定到一个“战略”的功能在运行时,但是addsubtractmultiply在编译时仍结合自己的定义。

这是一个实现细节,这些方法中的每一个Function2在编译时也都与一个匿名相关联,并且根据条件表达式的结果在运行时实例化了适当的类。这个细节真的是不相关的绑定时间分析,因为的意思addsubtractmultiply标识符是固定在编译时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果绑定时间很长,请换行

来自分类Dev

正确使用TextureAtlas以限制绑定时间

来自分类Dev

我无法在表中正确绑定时间

来自分类Dev

绑定时间跨度大于24小时

来自分类Dev

基于值的 SQL Server 绑定时间点

来自分类Dev

如何在 grails 3 中绑定时间?

来自分类Dev

绑定时的StringFormat

来自分类Dev

R生成并绑定时间行,每次增加10分钟

来自分类Dev

元素存在之前的html5音频绑定时间更新

来自分类Dev

是否可以更改gin-gionic中的默认绑定时间戳格式?

来自分类Dev

Angular2:在特定时间迭代* ng [错误:NgFor仅支持绑定到数组等Iterable。]

来自分类Dev

为什么在Angular中使用表达式绑定时时间格式会更改?

来自分类Dev

检查特定时间

来自分类Dev

什么是固定时间?

来自分类Dev

DataBind()在特定时间

来自分类Dev

恒定时间搜索

来自分类Dev

什么是恒定时间?

来自分类Dev

elasticsearch特定时间

来自分类Dev

DataBind()在特定时间

来自分类Dev

时钟固定时间

来自分类Dev

如何使用Spark Scala或sql对特定时间间隔内的记录进行分组?

来自分类Dev

使用Scala从头到尾进行恒定时间附加和检索

来自分类Dev

为什么在Scala List前面精确地执行恒定时间操作,而在线性时间操作之后附加?

来自分类Dev

Openshift在特定时间的每日定时

来自分类Dev

执行绑定时的WinJS通知

来自分类Dev

jQuery在绑定时加载部分

来自分类Dev

摇一定时间?

来自分类Dev

预定时间延迟

来自分类Dev

在特定时间创建NSDate