2013-12-18 95 views
0

我想創建一個變量,可以分配一個函數,但該函數在分配變量時執行。如何將函數賦值給變量而不執行?如何將函數分配給變量而不執行?

object VariableMethod { 
    def main(args: Array[String]) { 
    (new VariableMethod).test() 
    } 
} 

class VariableMethod { 
    var method: Unit = _ 
    def f1() { 
    println("Executing f1") 
    } 
    def test() { 
    method = f1 // Method f1 is invoked on this line, I only want the assignment to occur on this line 
    println("Is f1 executed before or after this?") 
    method // I want the f1 method to be invoked only here. 
    } 
} 

回答

0

我想通了......

object VariableMethod { 
    def main(args: Array[String]) { 
    (new VariableMethod).test() 
    } 
} 

class VariableMethod { 
    var method:() => Unit = _ 
    def f1() { 
    println("Executing f1") 
    } 
    def test() { 
    method = f1 
    println("Is f1 executed before or after this?") 
    method() 
    } 
} 
+1

只是一個建議:你明白爲什麼會這樣嗎?如果是這樣,如果你想擴大你的答案來包含這些信息,那麼這對社區是有好處的。 –

0

當函數無參數,並且希望將其分配到一個valvar,您可以使用_符號,以表明你想部分應用它。因此,例如:

object TestFunc{ 

    def f1() = { 
    "foo" 
    } 

    val v1 = f1 _ 
    val v2 = f1 
    val v3 = v1() 
} 

在這個例子中,V1是() => String型和v2是String類型。對於v3,我們完全應用v1並最終得到與v2相同的String

相關問題