2015-08-08 6 views
0

код приходит от https://gist.github.com/jrudolph/66925:Почему «Башни Ханоя» не работают под scala 2.11.4?

object TowersOfHanoi { 
    import scala.reflect.Manifest 

    def simpleName(m:Manifest[_]):String = { 
    val name = m.toString 
    name.substring(name.lastIndexOf('$')+1) 
    } 

    trait Nat 
    final class _0 extends Nat 
    final class Succ[Pre<:Nat] extends Nat 

    type _1 = Succ[_0] 
    type _2 = Succ[_1] 
    type _3 = Succ[_2] 
    type _4 = Succ[_3] 

    case class Move[N<:Nat,A,B,C]() 

    implicit def move0[A,B,C](implicit a:Manifest[A],b:Manifest[B]):Move[_0,A,B,C] = { 
     System.out.println("Move from "+simpleName(a)+" to "+simpleName(b));null 
    } 

    implicit def moveN[P<:Nat,A,B,C](implicit m1:Move[P,A,C,B],m2:Move[_0,A,B,C],m3:Move[P,C,B,A]) 
    :Move[Succ[P],A,B,C] = null 

    def run[N<:Nat,A,B,C](implicit m:Move[N,A,B,C]) = null 

    case class Left() 
    case class Center() 
    case class Right() 

    def main(args:Array[String]){ 
    run[_2,Left,Right,Center] 
    } 
} 

Я помню, когда я собирал его, он outputed что-то вроде «Переместить слева направо» несколько лет назад Scala 2.8.

Сегодня я пробовал его с помощью Scala 2.11.4, он ничего не выводит!

Есть ли какие-либо изменения в Scala? И как это исправить?

ответ

1

WFM (работает для меня)

scala> TowersOfHanoi.main(null) 
Move from Left to Right 
Move from Left to Center 
Move from Right to Center 
Move from Left to Right 
Move from Center to Left 
Move from Center to Right 
Move from Left to Right 

Я исповедую не обращал внимания на сам код - в implicits/типы тупые и в старом стиле манифеста. 2.10+ предпочитает TypeTags/ClassTags.

+0

Вы правы, я забыл, что мне нужно «запустить» его. Я думал, что мне просто нужно ** скомпилировать ** это :( – Freewind

+0

Я заметил, что не знаю, как использовать новые функции, но – Freewind

+0

http://stackoverflow.com/questions/31896390/how-to-use-new-scala -syntax-to-rewrite-towersofhanoi – Freewind

 Смежные вопросы

  • Нет связанных вопросов^_^