2017-08-15 69 views
1

有沒有辦法獲得作爲參數傳遞的函數的完整包和類信息/名稱?想象一下下面的情況:如何檢索Scala中參數函數的包和類信息?

package mypackage 

class MyClass { 
    def func(a: Int): Int = { 
    a * a 
    } 

    def getPackageInfo(f: Int => Int): String = { 
    // return package and class name of f 
    } 
} 

在這種情況下,在MyClass調用getPackageInfo(func)某處應該返回類似mypackage.MyClass.func

我知道f可能是一個匿名函數,不屬於一個類,可以通過額外的檢查來處理。

我也不介意更改getPackageInfo的簽名,只要它可以接受方法並返回它們的包和類信息。

回答

1

正常功能不能做到這一點,因爲即使你寫getPackageInfo(func)編譯器將其擴展到一個匿名函數:顧名思義它是一樣getPackageInfo(func _)這是一樣的getPackageInfo(x => func(x))。你想要的信息只是沒有存儲在f,所以沒有辦法把它拿出來。

但你可以使用宏來做到這一點。 https://github.com/dwickern/scala-nameof應該是一個有用的修改起點:它會給你func而不是mypackage.MyClass.func

相關問題