繁体   English   中英

编码样式-Scala中块中表达式的排序

[英]Coding style - ordering of expressions in blocks in Scala

自从我开始使用Scala进行编程以来,我倾向于使用这种语言看似自然的编码风格,最简单的例子就是解释它:

val a = {
def f1(p : Int) = ...
def f2(p : Int) =  ...
f1(12) * f2(100)
}

如您所见,值的乘法直到最后一行才被发现,如果您想了解代码,这是您应该熟悉的第一个操作。 相反,您需要先通读拼图的各个部分(函数f1,f2),然后才能看到它们的实际排列方式。 对我来说,这使代码更难阅读。 您如何处理这个问题-也许您根本没有发现这个问题?

一种有趣的方法可能是在宏天堂中使用未类型化的宏建议来引入where绑定,例如:

val a = (f1(12) * f2(100)) where {
  def f1(x : Int) = x + 1
  def f2(x : Int) = x + 2
}

被重写为上面的代码。 据我了解,无类型的宏将允许不存在的标识符f1和f2通过宏前的类型检查而存在。 我认为重写应该相对简单,然后第二次类型检查会发现任何问题。 但是,我实际上从未编写过任何宏,因此可能有些事情会失败!

如果可能的话,我认为这将是一个很好的形式(重写将解决执行顺序问题)-如果我有时间的话,可能会在编写它时遇到麻烦!

编辑:我有写这个的努力,而且事实证明它很容易。 代码在github上可用。 不幸的是,到目前为止我能做的最好的事情是:

  val result = where ( f1(1) * f2(2), {
    def f1(x : Int) = x + 1
    def f2(x : Int) = x + 2
  })

问题在于Scala的中缀运算符只是方法调用,因此我需要在表达式(f1(1)* f2(2))上构造一些东西才能调用它们。 但这就是在宏解析之前无法正确键入的表达,因此我不确定该怎么做。 方法,一个新问题的时间到了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM