好奇一下,词典是干啥用的,放到中间
@xzgyb 你这边看起来更侧重,代码结构设计,那个重写产品判断,改产品名判断挺有意思。 结构是要清晰一些 创建 terminal 的时候,初始化 Cart add_product 的时候,判断是否有该 Item,否的话创建
@Rei 调了一会儿,明白你说的 HASH 方案了,确实会简洁。算 total cost 也有一套,容易扩展,先大 package 再小 package BTW: 我跑测试要 require 改 require_relative 你 ruby1.8?
@kenshin54 哦,我没说清楚,不是 on site 面试,是面试完了,给个 puzzle 回去不限制时间,(当然,太长时间人家也会考虑)主要看什么代码风格,代码结构,思路是否清晰,有没有面向对象思路,有没有,BDD(我写 minitest 啦)之类。
require 'minitest/spec'
require 'minitest/autorun'
require 'terminal_source'
describe Terminal do
before do
@terminal = Terminal.new
end
it "should accept to set only unit price" do
@terminal.set_price 'M', 9.0
M.unit_price.must_equal 9.0
@terminal.total_cost.must_be_close_to 0
end
it "should also accept to set unit and pack price" do
@terminal.set_price 'N', 9.0, 3, 25.0
N.unit_price.must_equal 9.0
N.volume_price[:v_price].must_equal 25.0
N.volume_price[:amount].must_equal 3
end
it "should respond to scan after set_price" do
@terminal.must_respond_to :scan
end
it "cost and item sequence should be 0 and empty" do
@terminal.total_cost.must_be_close_to 0
@terminal.item_sequence.must_be_empty
end
end
describe Item do
before do
@terminal = Terminal.new
@terminal.set_price 'P', 9.0
@terminal.scan 'P'
end
it "should create Item class" do
P.scaned_items.first.must_be_kind_of Item
end
it "should create certain sequence after scan" do
@terminal.set_price 'Q', 8.0, 5, 35.0
@terminal.scan 'Q'
@terminal.scan 'P'
@terminal.scan 'P'
@terminal.item_types.must_include Q
@terminal.item_sequence.must_equal %w(P Q P P)
@terminal.item_sequence.join().must_equal "PQPP"
end
end
describe "When terminal and price have been set" do
it "should have right item scan sequence" do
@terminal = Terminal.new
@terminal.set_price 'A', 2.00, 4, 7.00
@terminal.set_price 'B', 12.00
@terminal.set_price 'C', 1.25, 6, 6.00
@terminal.set_price 'D', 0.15
%w(A B C D A B A A).each{|x| @terminal.scan x}
@terminal.item_sequence.join.must_equal "ABCDABAA"
@terminal.total_cost.must_equal 32.40
end
end
@vkill 前两个改过来看着是要顺眼
eval 的要改成什么样呢?
我的本意只是希望,A,B,C,这些商品能够,独立成 Item 的子类。
然后,在 set_price 的时候,动态定义一个产品。不 set_price 就不定义产品
然后,在 scan 的时候,生成对应产品一个实例。
就是说,可以用
A.amount
A.cost
呵呵,看着有道理,再指点指点吧