2015-03-09 2 views
-2

Я написал довольно странный метод в Scala.Scala: Что такое простейшая реализация метода «тайна», я могу получить?

def mystery(p: Int => String => Boolean): Int = ??? 

И теперь я не могу понять, какую реализацию и значение параметра он должен иметь.

Итак, какова простейшая реализация этого метода? И какова ценность, которую мы можем передать ей?

Моя попытка:

def mystery(p: Int => String => Boolean): Int = { 
    val m = (x1: Int) => p(x1) 
    val n = (x2: String) => m(_)(x2) 
    val k = (x3: Boolean) => p(_)(_)(x3) 
    if (k) 1 else 0 
} 
+0

, пожалуйста, не удаляйте части вашего вопроса, на которые уже ссылаются ответы. –

+0

Но если эта часть не так, я все равно должен оставить ее как есть? – barbara

+0

, если вы публикуете что-то, и люди ссылаются на него, а затем вы удаляете его, вы тратите время людей. –

ответ

0

Как насчет этого? p - это функция, поэтому для ее использования вам необходимо передать ее параметры. Параметры находятся в карри, и функция эквивалентна Int => (String => Boolean). Сначала вы даете ему Int, и он возвращает функцию String => Boolean. Итак, вы даете , что a String, и он возвращает Boolean.

def mystery(p: Int => String => Boolean): Int = { 
    val a = p(1) 
    val b = a("2") 
    if(b) 1 else 0 
} 

val f: Int => String => Boolean = (i: Int) => (s: String) => i.toString == s 

mystery(f) 

В вашей версии, m, n и k все определены как функции. Так, например, когда вы говорите if (k), это не имеет смысла, потому что if принимает Boolean, но вы даете ему функцию.

+0

Как я могу получить доступ к 'x', где' x' - значение 'p (x)'? – barbara

+0

Я не уверен, что вы сомневаетесь. Если вы вызываете 'p (x)', то вы знаете 'x'. Если 'p (x)' вызывается где-то в другом месте, то вычисляется какое-то новое значение, а старое -. – dhg

+0

В этом случае моя подпись совершенно неверна: 'p: Int => String => Boolean'. – barbara

Смежные вопросы