Я думаю, возможно, здесь есть некоторая путаница (помимо того, что таможенный командир справедливо указывает на тип constraint
.)
Одна из возможностей, которую Ramda пытается предложить, - это позволить нам программировать с выражениями вместо выражений . Особенно это касается операторов управления потоком. Но утверждение, которое выглядит так:
let foo
if (condition) {
foo = 'bar'
} else {
foo = 'baz'
}
уже имеет стандартную форму выражения:
const foo = condition ? 'bar' : 'baz'
Рамда на самом деле не пытается предложить альтернативу этому. Но есть и другой способ, которым мы могли бы попытаться использовать if
:
let foo
if (test(val)) {
foo = bar(val)
} else {
foo = baz(val)
}
Здесь при работе с функциями Рамда предлагает удобное сокращение:
const getFoo = ifElse(test, bar, baz)
// ... later
const foo = getFoo(val)
(И если вы просто хотите вернуть val
в случае, если тест не пройден, вы можете использовать сокращение:
const foo = when(test, bar)
Или, если вы хотите val
, когда тест пройден успешно, вы можете сделать
const foo = unless(test, baz)
)
Хотя может быть немного выразительнее превратить код в
const foo = ifElse(test, bar, baz)(val)
Это не главное. Обоснование для ifElse
состоит в том, чтобы использовать его при создании функции многократного использования ifElse(test, bar, baz)
. (cond
- то же самое, просто предлагая последовательность пар, зависящих от условия, вместо одной if
и одной else
.)
Обратите внимание на одну важную особенность: функция тестирования, функция, которая запускается, если она истинна, и функция, которая запускается, если она ложна, все имеют одинаковую подпись. Если один из них принимает три параметра, то все они должны принимать три параметра. И хотя тест должен возвращать логическое значение, два других могут иметь любой тип возвращаемого значения, но каждый из них должен иметь тот же тип возвращаемого значения, что и другой.
Таким образом, можно использовать thunk, как вы пытаетесь с помощью () => constraintElement.click()
, это в основном неправильное использование функции Ramda. Это, вероятно, ничего не дает в вашем коде.
До сих пор неясно, что вы пытаетесь сделать с преобразованием оператора if
в ifElse
или cond
. Не стесняйтесь добавлять в свой вопрос обновление, объясняющее более подробно, что вы пытаетесь сделать, и какую проблему вы пытаетесь решить с помощью этого преобразования, кто-то, вероятно, сможет предложить некоторую помощь. Но не забудьте уточнить, что такое constraint
и constraintElement
и к чему waitForElementToBeClickable
разрешается. Сейчас это довольно запутанно.