• 岗位是招 Ruby 工程师, 职责是 Python 到 Java 的转换, 神秘...

  • 约定. 问号表示返回布尔值. 在其他语言里约定相对方法名是 #is_adj() / #has_noun() 同理还有感叹号, 表示方法对对象自身有副作用

  • Padrino 最方便的还是天生多 app 的结构. 有点类似于 https://ruby-china.org/topics/28538 这贴中拆解的 engine + systems 的结构 不过, padrino 自带的 autoloader 实际用起来总有点不尽如人意的地方...

  • 函数参数疑问 at 2016年08月20日
    def add(a,b)
      a = a.push(b)
    end
    
    x = [1]
    y = 2
    add(x, y)之后,x变成了
    [1,2]
    

    这段代码里改变 a 值的是 a.push(b), 至于后面的 a = 这段, 符号是有作用域的. 你在函数传参时只传递了引用, 并没有将外层的符号传递进来, 里面的 a 和外面的 x 并不是同一个符号, 只是它们指向相同的对象. 你在函数中对符号 a 这个所指向的引用进行了改变, 并不会影响原来 a 所指向的对象. 所以第二段也不会影响 x, 因为 a + b 这个操作是不会影响 a 原来所指对象的值的

  • #1 楼 @zix 会的. 由于空间有限, 任何 hash 算法都会碰到哈希冲突, 只是概率的高低. 这书里应该只是简单的做一个简单的 Hash. 真的在学数据结构的时候, 处理哈希冲突会有很多策略的.

  • 散列的实现是建立一个大数组 big_array, key 传入固定的 hash 函数算出 hash(key) 值作为 index 索引. 把 value 存在 big_array[hash(key)] 这个容器里. 你问的这个函数就是在做这件事, 分配索引位置.

    具体到这函数的实现, 它通过 key.hash 算出一个 hash 值. 由于这个 hash 值可能比你 aDict 这个容器数组的索引范围大, 就再用 %(取余) 来映射.

  • #8 楼 @small_fish__ 有类似 ruby rack 或者 python wsgi 这样的 interface 吗? 在 awesome-crystal 的收集里似乎没看到

  • keyword arguments 从 ruby 2 开始就是被推荐的参数表风格. 好处来讲, keyword arguments 更方便的定义长可选参数表. 另外在调用的时候也更具有可读性, 这一点适合用来做 DSL.

    PS: 能尽量避免写 rocket syntax 就尽量避免. 既不好看也不简洁. 1.9 的风格指导开始就尽量淘汰这种写法. 2.2 以后更是支持

    {'@a#complex%whatever.long___string__': true}
    

    这种方式写 literal hash. 对于 string 和 symbol 区分不敏感的 kv 对都建议用新字面量定义方式.

  • salary 是 rand(10000) 真的好吗 233

  • 写 rails-api 的时候用到过 apipie-rails(GitHub) 这个 gem, 参数验证和简单的文档生成都能胜任.