为什么这不起作用:
val m = Map( 1-> 2, 2-> 4, 3 ->6)
def h(k: Int, v: Int) = if (v > 2) Some(k->v) else None
m.flatMap { case(k,v) => h(k,v) }
m.flatMap { (k,v) => h(k,v) }
case
语句的那个给了我:
res1: scala.collection.immutable.Map[Int,Int] = Map(2 -> 4, 3 -> 6)
但另一个失败并说MIssing Type parameter v
和expected: Int, actual:(Int, Int)
答案 0 :(得分:4)
case
关键字表示模式匹配,因此Tuple2
(一个Map
是Iterable
个Tuple2
个元素)您平坦地“覆盖”被分解为k和v。(当flatMap
函数产生h
而不是Option
或Map
时Iterable
工作的事实是Scala集合库可能过于宽松。)
如果没有case
关键字,则提供需要两个参数的函数,但flatMap
需要一个接受单个参数的函数(Tuple2
)。所以第二个版本没有进行类型检查。
答案 1 :(得分:0)
对于第二个,如果您不想使用<select name="buyer">
@foreach(['buyer1', 'buyer2', 'buyer3'] as $buyer)
<option vlaue="{{ $buyer }}"{{ ($order->buyer == $buyer) ? ' selected' : '' }}>{{ $buyer }}</option>
@endforeach
</select>
,则可以执行此操作。
case