2011-10-06 62 views
0

後續this SO question.在運行時供應方法類型參數化中的結構類型?

假設我有代碼

def bar(param: {def foo: Unit}*) = param.foreach(x => x.foo) 

該功能的原因對象param調用名爲foo

[編輯]

我想知道如果該方法以下是可能的(有或沒有反射)

  • param被固定在編譯時,該函數的名稱(在此情況下foo)在運行時
  • 兩者param供給和功能foo的名稱在運行時
  • param供給被固定在編譯時,函數的名稱,函數參數,值和返回類型在運行時提供。

我意識到結構打字已經使用反射。所以我的問題是,如果斯卡拉可以照顧它,或者如果我明確地在我的代碼中使用反射。我認爲第三個需要反思,我可以使用ASM庫。

回答

1

如果我明白你的問題:

  1. 在編譯時,編譯器會檢查每個param確實已經具有正確簽名的方法foo
  2. 在運行時,反射下用於調用方法的每個param

foo這樣你就不需要自己使用反射,但你應該保持介意反射將在運行時使用,可能會降低性能。

+0

問題是,如果我不知道要調用的函數的名稱(在這種情況下是'foo')(例如,要求用戶提供它)。 – Jus12

+1

然後,你不能依靠結構打字,因爲第一步是在編譯時(見答案)。你應該只使用普通的反射。 – paradigmatic

相關問題