回答
嗯 - 有趣的問題。我真的不知道是否有辦法訪問arguments
本身。我可能會通過使用sourcecode library來解決記錄函數參數的需求,這是爲那種事情設計的,但我承認我還沒有嘗試過從Scala.js那裏...
你無法直接訪問Scala.js中的arguments
對象。但是,您可以導出可變參數的方法,並預期在JavaScript它會工作:
object Logger {
@JSExportTopLevel("log")
def log(xs: js.Any*): Unit = {
xs.foreach(println)
}
}
這定義和出口log
到頂級的範圍。在JavaScript代碼,您現在就可以撥打:
log(1, {}, {a: 1}, "foo");
謝謝,這意味着我需要每次傳遞每一個參數。這比傳遞參數對象方便得多。 – romeozor
@romeozor我不明白你的意思。在上面的代碼片段中,'xs'基本上和'arguments'對象是一樣的。你可以繞過那個。 – sjrd
@ gzm0在我的Scala代碼中,我想放入一些日誌記錄調用,這也是Scala代碼,然後將其編譯爲JS。 JS中的'arguments'使我可以訪問所有的函數參數。問題不在於日誌記錄,而在於傳遞參數。我可以有一個函數1,參數,另一個3,我需要用這些相同的參數調用'log()'。但是,如果我可以訪問'arguments',那麼我可以通過'log(arguments)'。 – romeozor
正如@賈斯汀篤心建議,您可以使用sourcecode這一點。例如:
object Test extends js.JSApp {
def main(): Unit = {
a(1, "a")
b()
c("foo", "bar", "baz")
}
def trace()(implicit name: sourcecode.Name, args: sourcecode.Args): Unit = {
def makeArgList(as: Seq[sourcecode.Text[_]]): String =
as.map(a => f"${a.source} = ${a.value}").mkString("(", ", ", ")")
val argStr = args.value.map(makeArgList).mkString("")
println(f"${name.value}$argStr")
}
def a(arg1: Int, arg2: String): Unit = {
trace()
}
def b(): Unit = {
trace()
}
def c(x: String*): Unit = {
trace()
}
}
輸出如下:
[info] Running Test
a(arg1 = 1, arg2 = a)
b()
c(x = WrappedArray(foo, bar, baz))
正如你所看到的,trace
可以捕獲它從上下文所需要的一切,所以結果是更樣板自由比任何JS解決方案我能想到。
- 1. 如何從PHP對象獲取參數?
- 2. 如何獲取uiview對象參數
- 3. 如何從對象獲取參數值[]
- 4. 從對象獲取參數
- 5. 如何在Spring Portlet MVC中獲取對象類型參數
- 6. 從對象中獲取類參數
- 7. 如何從WMI對象中獲取WMI對象參考
- 8. 如何從Ember 2中的查詢參數中獲取對象?
- 9. 如何從Hibernate Criteria對象中獲取綁定參數?
- 10. 如何從JavaScript中的json對象獲取參數的名稱?
- 11. 如何從對象中獲取數據
- 12. 如何獲取函數中的對象的屬性,當它不在參數中
- 13. 獲取此對象的元類中對象的參數
- 14. 從對象如何提取參數參數顯示在文檔
- 15. 如何在獲取PFquery對象時獲取PFRelation對象?
- 16. 獲取PFUser參考對象
- 17. 獲取jQuery對象/參考
- 18. 如何在SimpleXMLElement對象中獲取值?
- 19. 如何在android中獲取json對象?
- 20. 如何在javascript中獲取對象值
- 21. 如何在android中獲取getActionBar對象?
- 22. 如何在Java中獲取對象類?
- 23. 如何在Jmeter中獲取Jmeter對象
- 24. 如何在對象中獲取此值?
- 25. 如何在jquery中獲取對象值
- 26. 獲取參數對象的名稱
- 27. 獲取參數對象的屬性
- 28. json對象作爲獲取參數
- 29. 從url標準對象獲取參數
- 30. javascript:獲取所有對象參數
請用您正在嘗試做的事情的片段更新您的問題。目前形式的問題很難理解。 – gzm0