在重構階段常會出現 converge(f, [I, g])
Pattern,此時可重構成 ap(f, g)
。
Version
Ramda 0.27.1
reverse()
import { equals, reverse } from 'ramda'
let isPalindrome = s => equals(s, reverse(s))
isPalindrome('cheese') // ?
isPalindrome('racecar') // ?
想要判斷 String 是否為 Palindrome,可使用 reverse()
與 equals()
判斷:
reverse()
:將 String 反轉equals()
:判斷反轉後 String 是否與原 String 相等
converge()
import { converge, equals, identity as I, reverse } from 'ramda'
let isPalindrome = converge(
equals, [I, reverse]
)
isPalindrome('cheese') // ?
isPalindrome('racecar') // ?
可使用 converge()
組合 isPalindrome()
使其 Point-free。
可發現出現 converge(f, [I, g])
pattern。
ap()
import { ap, equals, reverse } from 'ramda'
let isPalindrome = ap(equals, reverse)
isPalindrome('cheese') // ?
isPalindrome('racecar') // ?
可將 converge(f, [I, g])
重構成 ap(f, g)
。
Conclusion
- 可能一時看不出該使用
ap()
,但只要看到converge(f, [I, g])
就可重構成ap()