• 我决定晒一下我的桌面 at 2012年07月02日

    好奇一下,词典是干啥用的,放到中间

  • @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 呵呵,看着有道理,再指点指点吧