2016-03-03 5 views
1

Другой вопрос от новичка.scala: Тип обработки рисунка

Я пытаюсь понять, как работает следующий фрагмент кода. Теперь не сомневаюсь, каков смысл второго оператора case.

obj match { 
     case _: BigInt => Int.MaxValue 
     case BigInt => -1  
    } 

В первом случае я буду соответствовать объекту против типа BingInt Что будет согласующий против во втором случае?

+0

case _: BigInt является совпадением по типу BigInt и case BigInt является совпадением по значению BigInt – eliasah

ответ

6

Первый case соответствует любому значению, которое является BigInt. Второй номер case соответствует BigInt компаньон.

def test(obj: Any) = obj match { 
    case _: BigInt => Int.MaxValue 
    case BigInt => -1 
} 

scala> test(BigInt(1)) 
res2: Int = 2147483647 

scala> test(BigInt) 
res3: Int = -1 

Тем не менее, вполне вероятно, что то, что вы действительно хотите, это первый случай, если у вас есть какие-либо конкретные причины, чтобы проверить, является ли вы передаете объект BigInt компаньона к тому сопоставлению с образцом.

+1

Ну. Ответ очень очевиден. Спасибо за вашу помощь – Pavel