2016-02-09 63 views
1

如何it should接受一個字符串,然後函數沒有括號:爲什麼它應該使用「」{}類型檢查scalatest?

import org.scalatest.FlatSpec 
import scala.collection.mutable.Stack 

class StackSpec extends FlatSpec { 

    it should "pop values in last-in-first-out order" in { 

    } 

} 

爲什麼豈不是:

it(should("pop values in last-in-first-out order" in { 

    })) 

最近我才允許類似的編譯是:

object st { 

    class fs { 

    def it(f: => Unit) = { 

    } 

    def should(s: String)(f: => Unit): Unit = { 
     Unit 
    } 

    it(should("pop values in last-in-first-out order") { 

    }) 

    } 

} 

回答

4

調用對象的.和圍繞函數參數的()在scala中是可選的。所以訣竅是鏈中的返回對象實現提供所需API的函數。簡單示例:

object InObj { 

    def in(func : => Unit) = func 
} 

object ShouldObj { 

    def should(x: String) = InObj 
} 

trait It { 

    def it = ShouldObj 
} 

class MyClass extends It { 

    val f = it should "Do something" in { 

    } 
} 
2

斯卡拉有一定的規則如何將操作符和中綴方法名稱轉換爲方法調用。

it should "foo" in {} 

轉換成

it.should("foo").in({}) 

在您不使用「它」,但一些字符串從字符串到一些材料包裹的隱式轉換有助於提供的應法的情況。

相關問題