2016-12-07 8 views
-1

Ramdaで機能的なJavaScriptを習得しようとしていますが、これで取り残されています。 http://jsbin.com/kozeka/RamDAはsetDate関数で失敗します

そして、これはコードです::ここでJSビンがある

const date = new Date() 
const addDays = R.add(date.getDate()) 
const getDate = R.compose(date.setDate, addDays) 

console.log(date.setDate(date.getDate() + 6)) //Works 
console.log(date.setDate(R.add(date.getDate(), 6))) // Works 
console.log(date.setDate(addDays(6))) //Works 
console.log(getDate(6)) //Doesn't Work 

しかし、私はこのエラーを得ました。私は間違っているの?

"TypeError: Method Date.prototype.setDate called on incompatible receiver undefined 
    at setDate (<anonymous>) 
    at http://cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.min.js:6:3064 
    at http://cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.min.js:6:182 
    at kozeka.js:10:38" 
+0

をだからここで関数型プログラミングは来るのでしょうか? – naomik

+0

@naomik:Ramdaは "Javascriptプログラマーにとって実用的な機能ライブラリ"です。 'R.compose(date.setDate、addDays)'は関数型プログラミングです。 – Amadan

+0

@Amadanの関数型プログラミングは、単にRamdaや関数の構成を使うこと以上のものです。 – naomik

答えて

1

問題は関数として渡されたときsetDateがバインドdateインスタンスを失うということです。

これはcomposeにそれを渡すときに、明示的にdateインスタンスにメソッドを結合することによって解決することができます。

const getDate = R.compose(date.setDate.bind(date), addDays) 
関連する問題