ПОЗЖЕ EDIT:Скала ошибка: значение <FUNCTION_NAME> не является членом объекта <OBJECT_NAME>
- Связанные вопросы:
Why are Scala class methods not first-class citizens?
Motivation for Scala underscore in terms of formal language theory and good style?
Использование из _
подстановочный знак, или заполнитель синтаксис: Scala placeholder syntax
- В этом вопросе я пытался достичь более компактного синтаксиса, и решение участвует так называемый заполнитель синтаксиса. Эта точка зрения подкрепляется в Джейсон Шварц-х Learning Scala, страница 74:
Placeholder syntax is especially helpful when working with data structures and collections. Many of the core sorting, filtering, and other data structure methods tend to use first-class functions, and placeholder syntax reduces the amount of extra code required to call these methods.
ВОПРОС ТЕЛА
Я пробуя поддержку Scala для функций первого порядка, и столкнулся this проблемы, о методах передачи в качестве параметров. Насколько я понял, решение состоит в том, чтобы обернуть метод с помощью функции (илименованного или анонимного) первого порядка. Это работает для меня:
def wrapperFn(s:String):String = s.reverse
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
Таким образом, очевидно метод является членом экземпляра, но не из OBJE ct/Class (??) Кажется, что Scala обрабатывает время жизни класса и объекта по-разному, как это делает Java. Поэтому мой вопрос, теперь более кратко:
- Является ошибкой, вызванной какой-то глупой ошибкой или это действительно не разрешено? А если не разрешено, то почему?
Заранее благодарим!
большой, спасибо. Я предполагаю, что подстановочный знак '_' напрямую сопоставляется типу перед токеном' => '? –
Да, тип неименованных параметров выводится из подписи метода здесь. – Thilo
и вот как (я редактировал мой пост в любом случае): http://stackoverflow.com/questions/8260367/scala-placeholder-syntax –