- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 ramda.js 中编写 pointfree 风格的函数时遇到问题,想知道是否有人可以帮助我。 getEnv
函数读取环境变量,如果找不到,则将其记录到控制台。
这是我的代码
const env = name => R.path(['env', name], process);
const getEnv = name => R.pipe(
env,
R.when(R.isNil, () => log(`Missing env "${name}"`))
)(name);
console.log(getEnv('myenv'))
我想删除 getEnv
函数的 name
参数(如果可能的话,也删除 env
函数),但不要这样做不知道该怎么做。
最佳答案
函数 getEnv
的作用超出了其应有的范围。它实际上返回路径的内容或记录验证消息。
将其拆分为两个独立的函数。在下面的示例中,我将其称为 findPath
和 validatePath
,它们通常适用于所有路径。我已将 validatePath
包装到另一个名为 validateEnvPath
的函数中,该函数直接搜索“env”
要摆脱env
,您可以执行以下操作:R.flip (R.curry (R.path))
。这将先对函数进行柯里化(Currying),然后再对参数进行翻转,这样您就可以告诉函数您要首先查询的位置
const process = {env: {myenv: ':)'}}
const path = R.flip(R.curry(R.path))
const findPathInProcess = R.pipe(
path (process),
R.ifElse(
R.isNil,
R.always(undefined),
R.identity
)
)
const validatePath = path =>
validationPathResponse (findPathInProcess( path )) (`can't find something under [${path}]`)
const validateEnvPath = path =>
validatePath (buildPath (['env']) (path))
const buildPath = xs => x =>
xs.concat(x)
const validationPathResponse = response => errorMessage =>
response
? response
: errorMessage
console.log(validatePath(['env', 'myenv']))
console.log(validateEnvPath('myenv'))
console.log(validateEnvPath('yourenv'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
关于javascript - ramda.js 中带有模板字符串的 Pointfree 风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740708/
我正在尝试移植以下 Haskell 代码 (http://codepad.org/MMydRCxo) foo :: Int -> Int -> Int -> Maybe Bool foo a b c
好吧,事实证明我在我的程序代码中定义了这个函数: st_zipOp :: (a -> a -> a) -> Stream a -> Stream a -> Stream a st_zipOp f xs
我有一个函数对象: const src = { foo: str => str.toUpperCase(), bar: str => str + str, baz: str => str.
下面的函数createTuple可以表示为pointfree吗? let createTuple = fun v -> (v, v*2) createTuple 2 |> printfn "%A" /
我想编写一个 Haskell 函数,它返回一个附加到自身计数时间的列表(如 Python 中的 lst * count)。 我的第一次尝试是: self_append_n :: Int -> [a]
在 Haskell 中,我定义了一个乘法表生成器函数,如下所示: multTable :: [[Int]] multTable=map (\b -> map (b*) [1..12]) [1..12]
Learn You a Haskell使用以下 Prob 类型讨论“制作 Monad”: import Data.Ratio newtype Prob a = Prob { getProb :: [(
当参数应该散布在柯里化(Currying)组合函数中时,我试图弄清楚是否存在编写无点组合函数的模式 即(使用 Ramda): add_1_and_multiply = (add, mul) => R.
我想知道我是否可以像这样使用 Swift/RxSwift 来使用 pointfree-style: class MyClass { private let ageService: Observa
我一直在重用 lambda 表达式,例如 \x -> (f x, g x) 我将相同的输入应用于两个函数并将结果封装成一对。我可以写一个函数来捕捉这个 combine :: (a -> b) -> (
我有这个功能 rulesApply :: [PhrasePair] -> Phrase -> Phrase rulesApply pp = try (transformationsApply "*"
pointfree 函数可以返回一个元组吗?例如,以下是否可以用 pointfree 风格编写(其中 f1、f2 和 f3 已被定义): (\t -> (f1 t, f2 t, f3 t)) 在这种情
我想定义一个函数来计算列表中满足给定谓词的元素数量: number_of_elements :: (a -> Bool) -> [a] -> Int number_of_elements f
我怎样才能使以下函数成为 pointfree(使用 Ramda)? const prefixAll = R.curry((prefix, list) => R.map(R.concat(prefix)
可以this完成 pointfree 了吗? var joinByKey = R.curry(function(key, model){ return R.assoc(key, R.join(
我有一些谓词,例如: is_divisible_by_13 = lambda i: i % 13 == 0 is_palindrome = lambda x: str(x) == str(x)[::-
我正在以无点风格查看 Haskell 中的一些函数。在尝试重写一些简单的示例时,我卡在了这个上 func a b c d = sum $ take 2 $ sort [a, b, c, d] 如何将参
我在 ramda.js 中编写 pointfree 风格的函数时遇到问题,想知道是否有人可以帮助我。 getEnv 函数读取环境变量,如果找不到,则将其记录到控制台。 这是我的代码 const env
当我尝试以 pointfree 风格编写 JavaScript 时,我发现如果强制每个函数都采用这种风格,有时会失去其可读性。例如: import R from 'ramda' const ceil
鉴于下面的功能,如何将其转换为无点样式?使用 Ramda 的 prop 会很好和 path并跳过数据参数,但我无法弄清楚正确的语法。 const mapToOtherFormat = (data) =
我是一名优秀的程序员,十分优秀!