select
设备名称,
count(1) 合计,
sum(case 所在地 when '店1' then 1 else 0 end) 店1,
sum(case 所在地 when '店2' then 1 else 0 end) 店2,
sum(case 所在地 when '店3' then 1 else 0 end) 店3,
sum(case 所在地 when '店4' then 1 else 0 end) 店4,
sum(case 所在地 when '店5' then 1 else 0 end) 店5
from
基础表
group by
设备名称;
Ruby A PROGRAMMER'S BEST FRIEND
看到这里还没笑,到底哪里是笑话了?
前几天要改一个别人写的老方法,这个方法的上下文又比较多,全理清臣妾做不到,就是看测试代码理解这个方法的意图,通过跑测试确保我的改动没影响到别的功能。
所以我认为测试用处一是确保你的代码符合整个项目的预期,二是给后来的维护者说明你要解决的问题(因为文档咱们是不会好好写的,哈哈。文档没有动力维护,但是为了跑通测试你会主动维护测试的)
实现上面的功能我会这么写
def test(your_proc, behaviors = {})
user_ids = User.where("name like '%z%'").pluck(:id)
User.where(id: user_ids).find_each{|x| x.update_columns(name: "name_#{x.id}")}
your_proc.call()
behaviors.each do |operate, behavior|
case operate
when :x
behavior.call user_ids
when :y
behavior.call []
else
# default behavior
end
end
puts 'done'
true
end
# 调用
result = test(
->{ puts 'this is ->' },
{
x: lambda {|user_ids| Rails.logger.debug "user_ids: #{user_ids}"},
y: lambda {}
}
)
方法作者只需要提供支持的 behaviors 说明就行了,如果你那种实现,你怎么给调用者写文档……
这样耦合太紧了吧,我要是调用者我会疯的
windows 下还是用 vagrant 吧,不折腾
看测试代码
data.map {|h| {name: h[:label], value: h[:data]}}
问题1:Minitest::Test 是如何收集所有的测试类?
也可以用 ObjectSpace
扫一下所有Minitest::Test
子类达到效果
启动时加上-e production
试一下
看了一下 rails 的实现,更简单……
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 15
def blank?
respond_to?(:empty?) ? !!empty? : !self
end
[1] pry(main)> def blank? obj
[1] pry(main)* !obj || (obj.empty? rescue false)
[1] pry(main)* end
=> :blank?
[2] pry(main)> blank? nil
=> true
[3] pry(main)> blank? false
=> true
[4] pry(main)> blank? ""
=> true
[5] pry(main)> blank?({})
=> true
[6] pry(main)> blank? 0
=> false
[7] pry(main)> blank? 0.0
=> false
这样可以不
语法错误是 Ruby 没法解析你的脚本,还没到抛异常呢。
我猜是因为 每次bind
生成一个新的对象可以做到一套Initializer
配置可以被bind
多次,供不同的context
复用。
不过只看railties
下的代码也没有发现某个Initializer
被bind
多次……
也可用prepend
class My
prepend My_a
include My_b
def doit
dosth
end
end
obj0 = My.new
obj0.doit # This is A do sth.
str.scan('\w')
或者str.scan(/(?<=').*(?=')/)
#3 楼 @flypiggys attr_accessor
就是一个类的私有方法。
也可以
class Project
def find(id)
end
def self.user
end
private_class_method :user
end
a = [
[2, 3, 4, 5],
[3, 4, 5 ,6],
[1, 2, 3, 2],
[8, 9, 5, 3]
]
b = [
[1, 1, 1, 5],
[4, 5, 2, 3],
[6, 5, 6, 3],
[7, 4, 9, 7]
]
c = a.map.with_index do |aa, i|
aa.map.with_index do |aaa, j|
aaa > b[i][j] ? aaa : b[i][j]
end
end
就是传了一个 hash
class ABC
def initialize params
p params
end
end
http://www.ruby-doc.org/core-2.2.0/Array.html#method-i-sort
Comparisons for the sort will be done using the <=> operator or using an optional code block.
The block must implement a comparison between a and b, and return -1, when a follows b, 0 when a and b are equivalent, or +1 if b follows a.
spell check
可发现很多类似的错误。
def mine total, max, left
if total - max <= left
total - left
else
mine total, max, left + max + 1
end
end
策略就是上面方法,返回 0 就是必输局,必输局就让 AI 先手,然后。。。