这个是网站黑某样东西的段子合集吧,连观点都算不上,怎么谈合理? 看 Groovy 章节笑啦
This file says it all.
理解“类”也是一个对象是关键
class A; end
等价于
A = Class.new # 看到了么?创建一个“类”跟创建一个对象 ( a = A.new ) 是一样的
我也想过类似的问题:
Fixtures 是段子频发区
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
那句去掉试试
楼主总想搞个大新闻
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")
哈哈,我来提个新观点搅搅局: 管理员没有收各位会员的钱,没有义务客观公正,诸位管理员不要被道德绑架。 运营社区本来就是费精力的事情,诸位没有成本的质疑,对管理员是一种伤害。 退一亿步讲,就算管理员收好处了,说明社区有价值,管理员多年以来无私的付出得到了认可。 强烈建议推出收费质疑功能,你先来质疑个 10 块钱的。
看到 ErRuby ,求大神点评
小建议:有些名词不翻比翻译好
stream_for
第一个参数是 model, stream_from
第一个参数是 channel 的名字
ruby -run -e httpd . -p 8000
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
一个实例自然可以拥有自己的实例变量
A.instance_variable_get :@i
A.instance_eval { @i }
A.class_eval { @i }
来人肉运行一下脚本:
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
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
送个 ruby 版本
def print_lingxing line_num
raise "朕不伺候偶数" if line_num.even?
line_num.times do |i|
if i < line_num / 2
puts "*".rjust(line_num / 2 - i + 1) + "*".rjust(i * 2 + 1)[1..-1]
else
puts "*".rjust(i + 1 - line_num / 2) + "*".rjust((line_num - i) * 2 - 1)[1..-1]
end
end
end
print_lingxing 9
arr[i..-1].index x
#14 楼 @ghn645568344
https://github.com/rails/rails
gem install rails --pre