是否已经有任何Scala等语言的最佳实践集合?
我找到了关于函数式语言的设计模式,功能性战略编程的设计模式的工作.有OO语言的GoF设计模式.但功能性OO混合动力车是否有任何模式?我所看到的只是这个清单.什么是已知的?
我在网站上有一些限制区域,我想为其指定login_required装饰器.但是我想在主urls.py中包含一次,而不是包含urls.py中的每个url
所以代替:
/private/urls.py:
(r'^profile/$', login_required(profile)),
Run Code Online (Sandbox Code Playgroud)
我会做一些事情:
/urls.py
urlpatterns = patterns('',
...
(r'^private/', login_required(include('private'))),
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用.
Scala和F#采用的方法在统一OO和FP范例方面有哪些主要区别?
编辑
每种方法的相对优点和缺点是什么?如果,尽管支持子类型,F#可以推断函数参数的类型然后为什么不能Scala?
为什么Clojure尽管如此强调功能范式,却不使用Maybe/ Optionmonad来表示可选值?Option在Scala中使用非常普遍,Scala是我经常使用的函数式编程语言.
什么是函数式编程相当于装饰器设计模式?
例如,您如何在功能样式中编写此特定示例?
目前正试图了解Elixir中的"^"运算符.来自网站:
当没有兴趣重新绑定变量而是匹配匹配之前的值时,可以使用pin运算符^:
来源 - http://elixir-lang.org/getting_started/4.html
考虑到这一点,您可以将新值附加到符号,如下所示:
iex> x = 1 # Outputs "1"
iex> x = 2 # Outputs "2"
Run Code Online (Sandbox Code Playgroud)
我也可以这样做:
iex> x = x + 1 # Outputs "3"!
Run Code Online (Sandbox Code Playgroud)
所以我的第一个问题是; Elixir变量是否可变? 看起来确实如此......在函数式编程语言中,这应该是不可能的?
所以现在我们来到"^"运算符......
iex> x = 1 # Outputs "1"
iex> x = 2 # Outputs "2"
iex> x = 1 # Outputs "1"
iex> ^x = 2 # "MatchError"
iex> ^x = 1 # Outputs "1"
Run Code Online (Sandbox Code Playgroud)
我认为"^"的效果是将"x"锁定到绑定到它的最后一个值.这就是它的全部吗?为什么不确保所有'匹配'/赋值都像Erlang本身一样不可变?
我刚刚习惯了......
erlang functional-programming immutability elixir variable-assignment
虽然学习Redux我遇到了Reducers.文件说明:
reducer是一个纯函数,它接受前一个状态和一个动作,并返回下一个状态.(previousState,action)=> newState.它被称为reducer,因为它是你传递给Array.prototype.reduce(reducer,?initialValue)的函数类型.
MDN将该reduce方法描述为:
reduce()方法对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值.
我仍然对Redux定义减速器的原因感到困惑,因为它没有任何意义.其次,MDN描述似乎也不正确.该reduce方法并不总是用于减少单个值.当用于代替链接时,它可以用来代替map和filter实际上更快.
MDN描述不正确吗?
回到Redux定义的reducer,它指出:
它被称为reducer,因为它是你传递给Array.prototype.reduce(reducer,?initialValue)的函数类型
我的印象是Redux中的reducer负责修改状态.减速器示例:
const count = function(state, action) {
if(action.type == 'INCREMENT') {
return state + 1;
} else if(action.type == 'DECREMENT') {
return state - 1;
} else {
return state;
}
}
Run Code Online (Sandbox Code Playgroud)
...我不知道这是一个传递给它的函数reduce.如何将数据减少到单个值?如果这是一个你传递给的函数reduce那么state将是回调并且action将是初始值.
谢谢你有任何明确的解释.这很难概念化.
什么是文本编辑器的纯功能数据结构?我希望能够在文本中插入单个字符并以可接受的效率从文本中删除单个字符,并且我希望能够保留旧版本,因此我可以轻松地撤消更改.
我应该只使用字符串列表并重用不同版本的行吗?
haskell functional-programming scala text-editor data-structures
我已经看到提到IO不满足monad定律,但我没有找到一个简单的例子来证明这一点.有人知道一个例子吗?谢谢.
编辑:正如ertes和nm指出的那样,使用seq有点非法,因为它可以使任何monad失败的法律(结合undefined).由于undefined可以将其视为非终止计算,因此使用它完全没问题.
所以修改后的问题是:任何人都知道一个例子表明IO未能满足monad法则,而不使用seq?(或者,IO如果seq不允许,可能会出现符合法律规定的证据?)
我想实现像_.first用_.filter,即具有元素的集合,我想获得的第一个(如果存在的话)匹配了一个道理测试(迭代器).
例如,给定如下数组:
var arr = [{a: 1}, {a: 5}, {a: 9}, {a: 11}, {a: 15}]
Run Code Online (Sandbox Code Playgroud)
我想获得与我的自定义函数匹配的第一个(也是唯一的第一个)元素:
_.filterFirst(arr, function(el) { return el.a > 10; }); // make it
Run Code Online (Sandbox Code Playgroud)
至今:
_.first(arr) == {a:1}
_.filter(arr, function(...)) == [{a:11}, {a:15}]
Run Code Online (Sandbox Code Playgroud)
有没有一个干净的解决方案,这样做比哪个好_.first(_.filter(arr, iterator))?
haskell ×3
scala ×3
clojure ×2
f# ×2
javascript ×2
monads ×2
collections ×1
comparison ×1
decorator ×1
django ×1
elixir ×1
erlang ×1
immutability ×1
io ×1
maybe ×1
oop ×1
option ×1
paradigms ×1
reactjs ×1
redux ×1
text-editor ×1
url ×1