douglarek

douglarek 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

Code talks

个人动态

douglarek 回答了问题 · 2016-05-24

解决go语言中接口中不能喝strut相同吗?

Scala 中可以,建议题主尝试一下;

关注 4 回答 3

douglarek 回答了问题 · 2016-05-24

关于DefaultServeMux源码这一块没看懂,请高手解释一下

var defaultServeMux ServeMux

这个既是声明也是初始化,defaultServeMux 默认值是 ServeMux 的 零值(zero value);

关注 3 回答 1

douglarek 回答了问题 · 2016-05-24

go代码疑惑,usb.(PhoneConnector) 是何意?

关注 7 回答 6

douglarek 回答了问题 · 2016-05-24

解决Gopher 是什么意思?

Gopher 英文意思是地鼠,也泛指 Golang 开发者,类似于 Python 开发者叫 Pythonista;

至于 @查尔斯 说:

或者可以理解为go语言的全称

明显胡扯!

关注 4 回答 1

douglarek 回答了问题 · 2016-05-24

解决go中怎样形象的理解接口?

接口没什么高深之处,其作用就是对外隐藏实现:

type A interface {
    Get(k string) interface{}
    Set(k string, v interface{})
}

func NewA() A {
    return &a{}
}

type a struct {
    // ...
}

func (a0 *a) Get(k string) interface{} {
    // ...
    return nil
}

func (a0 *a) Set(k string, v interface{}) {
    // ...
}

关注 5 回答 3

douglarek 回答了问题 · 2016-05-24

app token 怎么生成

base64 encode uuid :


import (
    "encoding/base64"

    "github.com/satori/go.uuid"
)

func sjmm() string {
    encoder := base64.NewEncoding("NE4NahtY8WgBhvdjKdxvfwe")
    return encoder.EncodeToString(uuid.NewV4().Bytes())
}

关注 12 回答 6

douglarek 提出了问题 · 2015-06-05

Django 一个 request 请求中如何保证多个 db 的事务以及回滚呢?

Django 一个 request 请求中如何保证多个 db 的事物以及回滚呢?

比如下面一个简单的例子:

def foo(request):

    A() # 访问一个名叫 a 的db alias
    B() # 访问一个名叫 b de db alias

怎样保证 foo 函数内 A B 两个 db 操作同时事务并且失败时同时回滚?

关注 3 回答 1

douglarek 回答了问题 · 2014-08-19

在python里判断一个值是否是一个字典里如果有返回key有什么好的算法?

在列表里面执行查找操作,时间复杂度是 log(n);在字典中执行查找操作是 log(1)

关注 0 回答 5

douglarek 收藏了文章 · 2014-08-19

[gist]为什么要柯里化(curry)

from http://oyanglul.us

还记得 Haskell Curry吗,

多巧啊, 人家姓 Curry 名 Haskell, 难怪 Haskell 语言会自动柯里化, 呵呵. 但是不奇怪吗, 为什么要柯里化呢. 为什么如此重要导致 Haskell 会默认自动柯里化所有函数, 不就是返回一个部分配置好的函数吗.

我们来看一个 Haskell 的代码.

max34(max3)4

结果都是4, 这有设么用呢.

这里看不出来, 放到高阶函数试试. 什么? 看不懂天书 Haskell, 来看看 JavaScript 吧.

我们来解一个问题

1. 写一个函数, 可以连接字符数组, 如 f(['1','2']) => '12'

好吧,如果不用柯里化, 怎么写? 啊哈 reduce

varconcatArray=function(chars){returnchars.reduce(function(a,b){returna.concat(b);});}concat(['1','2','3'])// => '123'

很简单,对吧.

2. 现在我要其中所有数字加1, 然后在连接

varconcatArray=function(chars,inc){returnchars.map(function(char){return(+char)+inc+'';}).reduce(function(a,b){returna.concat(b)});}console.log(concatArray(['1','2','3'],1))// => '234'

3. 所有数字乘以2, 再重构试试看

varmultiple=function(a,b){return+a*b+''}varconcatArray=function(chars,inc){returnchars.map(function(char){returnmultiple(char,inc);}).reduce(function(a,b){returna.concat(b)});}console.log(concatArray(['1','2','3'],2))// => '246'

是不是已经看出问题了呢? 如果我在需要每个数字都减2,是不是很麻烦呢.需要将map 参数匿名函数中的 multiple 函数换掉. 这样一来concatArray就不能同时处理加, 乘和减? 那么怎么能把他提取出来呢? 来对比下柯里化的解法.

柯里化函数接口

varmultiple=function(a){returnfunction(b){return+b*a+''}}varplus=function(a){returnfunction(b){return(+b)+a+''}}varconcatArray=function(chars,stylishChar){returnchars.map(stylishChar).reduce(function(a,b){returna.concat(b)});}console.log(concatArray(['1','2','3'],multiple(2)))console.log(concatArray(['1','2','3'],plus(2)))

有什么不一样呢 1. 处理数组中字符的函数被提取出来, 作为参数传入 2. 提取成柯里化的函数, 部分配置好后传入, 好处显而易见, 这下接口非常通畅 无论是外层调用

concatArray(['1','2','3'], multiple(2))

还是内部的 map 函数

chars.map(stylishChar)

这些接口都清晰了很多, 不是吗

这就是函数式的思想, 用已有的函数组合出新的函数, 而柯里化每消费一个参数, 都会返回一个新的部分配置的函数, 这为函数组合提供了更灵活的手段, 并且使得接口更为流畅.

再加上自动柯里化的库 ramda, 简直就完美了

var multiple = ramda.curry(function(a, b){
  return +b*a + ''
})
var plus = ramda.curry(function(a, b){
  return (+b)+a + ''
})

JS Bin

查看原文

douglarek 评论了文章 · 2014-08-19

编写兼容 Python 2 和 Python 3 的代码

认证与成就

  • 获得 28 次点赞
  • 获得 8 枚徽章 获得 1 枚金徽章, 获得 2 枚银徽章, 获得 5 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2013-05-21
个人主页被 708 人浏览