byname.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 85 行

SCALA
85
字号
object Test extends Application {def test[A](name: String, expect: A, actual: => A) {    if (expect != actual) throw new AssertionError("test " + name + " failed")    else println("test " + name + " completed properly")}def testNoBraces = 1test("no braces", 1, testNoBraces)val testNoBracesR = testNoBraces _test("no braces r", 1, testNoBracesR())def testPlain(x: String, y: String): String = x + ytest("plain", "ab", testPlain("a", "b"))val testPlainR = testPlain _test("plain r", "cd", testPlainR("c", "d"))def testOldByName(x: => Int) = x + 1test("old by name", 3, testOldByName(1 + 1))val testOldByNameR = testOldByName _test("old by name r", 3, testOldByNameR(1 + 1))val testOldByNameS: (=> Int) => Int = testOldByName _test("old by name s", 3, testOldByNameS(2))def testRegThenByName(x: Int, y: => Int): Int = x + ytest("reg then by name", 7, testRegThenByName(3, 2 * 2))val testRegThenByNameS: (Int, =>Int) => Int = testRegThenByName _test("reg then by name s", 8, testRegThenByNameS(2, 12 / 2))def testVarargs(x: Int*) = x.reduceLeft((x: Int, y: Int) => x + y)test("varargs", 4, testVarargs(1, 2, 1))val testVarargsR = testVarargs _test("varargs r", 4, testVarargsR(1, 2, 1))def testAll(x: Int, y: => Int, z: Int*) = x + y + z.sizetest("all", 5, testAll(1, 2, 22, 23))val testAllR = testAll _test("all r", 7, testAllR(2, 3, 34, 35))val testAllS: (Int, =>Int, Int*) => Int = testAll _test("all s", 8, testAllS(1, 5, 78, 89))// test curryingdef testC00()(): Int = 1test("c00", 1, testC00()())val testC00R = testC00 _test("c00 r", 1, testC00R()())val testC00RR = testC00() _test("c00 rr", 1, testC00RR())def testCBB(a: => Int)(b: => Int) = a + btest("cbb", 3, testCBB(1)(2))val testCBBR = testCBB _test("cbb r", 5, testCBBR(1)(4))val testCBBRR = testCBB(4) _test("cbb rr", 6, testCBBRR(2))def testCVV(a: Int*)(z: String, b: Int*) = a.size + b.sizetest("cvv", 3, testCVV(1, 2)("", 8))val testCVVR = testCVV _test("cvv r", 3, testCVVR(1)("", 8, 9))val testCVVRS: (String, Int*) => Int = testCVV(2, 3)test("cvv rs", 4, testCVVRS("", 5, 6))println("$")// vim: set ts=4 sw=4 et:}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?