2013-04-10 48 views
2

当我通过几个模式匹配发送一个变量时,这样做的命名约定是什么?后续/嵌套模式匹配

val somethingBetweenOriginalAndResult = original match { 
    case ... 
    case ... 
} 
val somethingElseBetweenOriginalAndResult = somethingBetweenOriginalAndResult match { 
    case ... 
    case ... 
} 
val result = somethingElseBetweenOriginalAndResult match { 
    case ... 
    case ... 
} 

其实我只需要originalresult之间引入每VAL smutches我的命名空间,并要求我研究出一个新的变量名。我怎样才能避免这种情况?

回答

4

使用块和短期临时变量的名称(只是足够长的时间来提醒别人你想实现什么 - 如果这是显而易见的,x和公司将做精):

val original = ... 
val result = { 
    val x = original match { ... } 
    val y = x match { ... } 
    y match { ... } 
} 

你可以甚至完全忽略的变量名,如果你喜欢它的感觉(虽然优先是倒退,所以你需要添加括号或某事):

val result = { 
    ((original match { 
    ... 
    }) match { 
    ... 
    }) match { 
    ... 
    } 
} 

自上次比赛的结果是下一个参数。

+0

谢谢你的解决方案。我更喜欢第二种形式,因为我不喜欢在上下文中没有意义的变量名称。 – ideaboxer 2013-04-10 21:06:29

+1

@ user1625837 - 够公平的。与瞬时变量建立友好关系也是一件好事,对于需要两次引用同一事物的情况。小块代码的vals像一个便笺簿一样使用,可以是简化代码块而不实际将其分解成方法(从而定义接口等)的有效方法。 – 2013-04-10 21:24:29

+0

有趣的想法,谢谢 – ideaboxer 2013-04-11 00:12:59

1

如果你真的不在乎某件事情,或许你应该尽量避免创造它。它实际上取决于原型的类型以及您在模式匹配中考虑的情况,但是可能有一种方法可以通过一种模式匹配来实现。最糟糕的情况下,为什么不使用:

val result = original match { 
    case ... 
    case ... 
} match { 
    case ... 
    case ... 
} match { 
    case ... 
    case ... 
} 

我不喜欢它,真的,但至少你没有创建,你可能不小心参考以后不必要的值。