Параметр метода в Scala - PullRequest
       1

Параметр метода в Scala

0 голосов
/ 25 февраля 2012

Я начинаю Scala, и я не понимаю, что такое часть s =>.Может ли кто-нибудь объяснить мне это?

thrill.remove(s => s.length == 4)

Ответы [ 4 ]

3 голосов
/ 25 февраля 2012

Это способ указания функции. Функция - это то, что принимает один или несколько параметров в качестве входных данных и возвращает выходные данные. Один из способов указать функцию - с помощью символа =>.

s: String => s.length == 4 // a function that takes a String called s as input
                           // and returns a Boolean (true if the length of s is 4
                           // false otherwise)

В Scala вы можете использовать функции, такие как целые числа или строки, или любые другие виды базовых типов данных.

Вы можете назначить их переменным:

scala> val f = (s: String) => s.length==4 // assigning our function to f
f: String => Boolean = <function1>

scala> f("abcd") // ...and using it
res1: Boolean = true

и вы можете передать их в качестве параметров другим функциям или методам:

scala> val thrill = List("foo", "bar", "baz", "bazz")
thrill: List[java.lang.String] = List(foo, bar, baz, bazz)

scala> thrill.remove(s => s.length == 4)
warning: there were 1 deprecation warnings; re-run with -deprecation for detail

res2: List[java.lang.String] = List(foo, bar, baz)

здесь вы говорите методу удаления: «применить эту функцию s => s.length == 4 к каждому элементу в списке и удалить все элементы, для которых эта функция возвращает true»

Кстати, обратите внимание, что удаление устарело. Предлагаемая альтернатива - filterNot

scala> thrill.filterNot(s => s.length == 4)
res3: List[java.lang.String] = List(foo, bar, baz)
2 голосов
/ 25 февраля 2012

Выражение

s => s.length == 4

представляет функцию, которая принимает строку (я предполагаю) и возвращает логическое значение в зависимости от того, имеет ли оно длину четыре

val f = s => s.length == 4
println(f("five")) //prints "true"
println(f("six")) //prints "false"

the s => part просто объявляет имена параметров для функции (в данном случае только одно: s)

1 голос
/ 25 февраля 2012

Я считаю, что все перечисленные ниже совпадают (хотя я тоже новичок в Scala, не стесняйтесь предлагать исправления)

thrill.remove((s:String) => s.length == 4)
thrill.remove(s => s.length == 4)
thrill.remove(_.length == 4)
1 голос
/ 25 февраля 2012

Это говорит: «запустите функцию s => s.length == 4 над всеми элементами в трепете и удалите все, где функция возвращает true».Логически эта функция должна принимать в качестве параметра один элемент типа, содержащегося в thrill, и возвращать логическое значение (true или false).

Синтаксис scala s => ... указывает лямбда-функцию- своего рода сокращенная функция, где во многих случаях выводятся параметры функции и возвращаемые типы.Например, в этом случае компилятор достаточно умен, чтобы знать, что если острые ощущения содержат строки, s должен быть строкой.Аналогично, он может статически типизированным способом подтвердить, что возвращаемое значение (s.length == 4) является логическим и удовлетворяет требованию для логического возвращаемого значения.функция определена как boolean f(String s) { return s.length == 4; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...