[英]Scala error: value <FUNCTION_NAME> is not a member of object <OBJECT_NAME>
之后編輯:
_
通配符或占位符語法的用法: Scala占位符語法
在處理數據結構和集合時,占位符語法特別有用。 許多核心排序,過濾和其他數據結構方法傾向於使用一流的功能,並且占位符語法減少了調用這些方法所需的額外代碼量。
問題體
我想了Scala的支持一階的功能,遇到這種問題,關於傳遞方法作為參數。 據我了解,解決方案是用(命名或匿名)一階函數包裝該方法。 這為我工作:
def wrapperFn(s:String):String = s.reverse
wrapperFn
可以將wrapperFn
作為參數傳遞給其他高階函數,或者作為值傳遞給其他類似這樣的定義:
val otherGoodFn:(String=>String) = goodWrapperFn
到現在為止還挺好。 當我嘗試混合兩個步驟(避免使用s
參數的冗長使用),並將方法直接傳遞給函數類型的值時,問題就來了,就像這樣:
def errorFn:(String=>String) = String.reverse
這將引發以下錯誤:
error: value reverse is not a member of object String
def errorFn:(String=>String) = String.reverse
^
我不明白,因為這按預期工作:
val s:String = "hello"
s.reverse
因此,顯然該方法是實例的成員,而不是Object / Class(??)的成員。似乎Scala以與Java完全不同的方式處理類和對象的生存期。 所以我的問題現在更加簡潔:
提前致謝!
String.reverse
將調用靜態方法(或object
上的方法,而不是Scala術語中的類)。
你可以做
def errorWrapperFn:(String=>String) = _.reverse
通過下划線,您無需指定名稱即可訪問方法/函數參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.