• Ruby is Not Even Funny at 2016年12月12日

    这个是网站黑某样东西的段子合集吧,连观点都算不上,怎么谈合理? 看 Groovy 章节笑啦

    This file says it all.

  • #5 楼 @breeze 你 Class.new 一个 A.singleton_class 看看

  • 理解 “类” 也是一个对象是关键

    class A; end
    等价于
    A = Class.new # 看到了么?创建一个“类”跟创建一个对象 ( a = A.new ) 是一样的
    
  • 我也想过类似的问题:

    • 是不是好的东西就能流行?不一定
    • 是不是我喜欢的东西就是好的东西?不一定
    • 我会不会花时间精力在一个不一定会流行但是我喜欢的东西上?会
  • Fixtures 是段子频发区

  • #4 楼 @chenge Erlang 里不可能修改 x 的值 你所谓修改 x 的值,是指修改 x 的 state,函数编程的特点就是没有 state。

    比如面向对象编程的话,多次调用 person.talk 方法,结果会根据 person 的 state 改变;函数是编程不存在 state,调用一个方法,参数相同,结果永远相同(除非生成随机数这类的特例)这也是所谓的 no side-effects,总之不要带着用面向对象编程既定的思路来看函数式编程。

  • Elixir 里的等号不是赋值,是 pattern match,programming elixir 里讲等号那章的标题就是

    Assignment: I Do Not Think It Means What You Think It Means.”

    一句话讲不明白,建议自己看看

    Immutable 在 Erlang 里面比较明显

    1> X = 1.
    1
    2> X = 2.
    ** exception error: no match of right hand side value 2
    

    就是一个 “变量” 不能被重复赋值,Elixir 变量可以重复赋值,但是底层是做了一点小封装吧。

  • 我很乐意承认 Rails 可能会存在一些问题,不过这个作者的论点有点断章取义了

    比如 DRY

    因为 DRY = Abstraction
    并且 Duplication > Wrong Abstraction
    所以 Duplication > DRY
    

    丝毫不考虑Right Abstraction的情况

    再说 KISS 他说的一大堆如果建立在 Rails 经常出现莫名其妙不可调试的错误,且 Rails core team 水平不高的情况下,不过我认为这不符合现实。

    再看这个网站的首页 slogan

    The goal of this project is to help developers stop suffering while they are working with Ruby on Rails

    如果把他的反对 Rails 的地方都去掉然后再来用 Rails,嗯,大家可以想象一下。

  • 把你puts那句去掉试试

  • 社区百态 at 2016年10月24日

    楼主总想搞个大新闻

  • Rails 5 以上可以

    Plan
      .where(start_time: start_at.. end_at).or
      .where(end_time: start_at..end_at).or
    # blablabla
    
  • OR的场景仅限于两个结果集都来自同样的超集, 比如同一张表,或者同一个通过JOIN获得的结果集,这种情况其实就不是取并集了。 如果两个结果集来自不同的超集,这种情况才叫取并集,要用UNION ALL

    比如想得到对一本书或一部电影感兴趣的人,可以book.fans UNION ALL film.fans,用OR实现的话就困难一些了

  • 假设你的 model 是User

    data_set1 = xxx.users
    data_set2 = yyy.users
    User.from("(#{data_set1.to_sql} UNION ALL #{data_set2.to_sql}) as users")
    
  • 全栈营感想 at 2016年09月28日

    哈哈,我来提个新观点搅搅局: 管理员没有收各位会员的钱,没有义务客观公正,诸位管理员不要被道德绑架。 运营社区本来就是费精力的事情,诸位没有成本的质疑,对管理员是一种伤害。 退一亿步讲,就算管理员收好处了,说明社区有价值,管理员多年以来无私的付出得到了认可。 强烈建议推出收费质疑功能,你先来质疑个 10 块钱的。

  • 隔壁 #RubyKaigi 正在时 at 2016年09月08日

    看到 ErRuby ,求大神点评

  • 👍 小建议: 有些名词不翻比翻译好

  • stream_for第一个参数是 model, stream_from第一个参数是 channel 的名字

  • ruby -run -e httpd . -p 8000

  • 如何访问 @c at 2016年06月02日
  • Ruby 的实例变量的 scope at 2016年05月11日
    class A
      @i = "hi"
      puts "此时self是#{self}"
      def say
        puts "此时self是#{self}, A的一个实例"
        puts "#{@i}"
      end
    
    end
    
    ins = A.new
    ins.say
    

    两个@i不是同一个东西,def会打开新的作用域。 def里面的@i好理解,就是 A 的每一个实例的实例变量。 def外面的@i,首先要知道 A 是 Class 的一个实例

    ins.class # A
    A.class   # Class
    

    一个实例自然可以拥有自己的实例变量

  • Ruby 的实例变量的 scope at 2016年05月10日
    A.instance_variable_get :@i
    A.instance_eval { @i }
    A.class_eval { @i }
    
  • 元编程代码的解释 at 2016年04月28日

    来人肉运行一下脚本:

    each_setup do |setup|
      setup.call
    end
    

    调用方法each_setup,参数 (即def each_setup(&block)中的block) 是proc { |setup| setup.call }

    然后方法实际运行等同于

    block.call proc {puts "one"}
    block.call proc {puts "two"}
    

    再写直白一点

    (proc {|setup| setup.call}).call(proc {puts "one"})
    (proc {|setup| setup.call}).call(proc {puts "two"})
    

    再往后就看 ruby block 相关的文章吧

  • me = People.new
    me.singleton_class.class_eval do
      def happy?; true; end
    end
    
  • 这个怎么玩儿? at 2016年04月11日
    def to_str hash
      strs = []
      hash.each do |key, value|
        if value.is_a? Hash
          strs += to_str(value).map {|s| "#{key}_#{s}"}
        else
          strs << "#{key}_#{value}"
        end
      end
      strs
    end