文档介绍:Scala解决问题目录Whyscala用scala解决问题MoreaboutscalaQ&APolyglotprogrammingPolyglotprogrammingJavaScalaRubyPythonGroovyC++……HighorderfunctionclassFollowingRule()extendsRulewithPricingService{defapply(ev:Event):Pricing={valoppProducts:List[OppProduct]=getOppproducts()valavailabled=oppProductsfilter{}//有货的availabledmatch{caseList()=>newAbnormalPricing(ev,"withoutopponent")case_=>{vallowPriced:OppProduct=()//最低价的newSubmitPricing(ev,,"following"+lowPriced)}}}}position:1objectRuleFactoryextendsPricingServicewithTracer{abstractclassFilterextends(Pricing=>Pricing)valfollowing=newFollowingRule()valmarkdown=newMarkdownRule()valnegativeProfit:Filter=newFilter{defapply(pricing:Pricing)=pricingmatch{caseSubmitPricing=>if(<getWarehousePrice()){trace("negativeprofit"+pricing)newManualPricing(,,pricing)}elsepricingcase_=>pricing}}position:2valexceed:Filter=newFilter{defchangeCheck(a:Float,b:Float,per:Float):Boolean=(a-b)>a*perdefapply(pricing:Pricing)=pricingmatch{caseSubmitPricing=>if(changeCheck(,,getThreholdPercentage()))newManualPricing(,,pricing)elsepricingcase_=>pricing}}deffollowingRule(event:Event)=followingandThennegativeProfitandThenexceeddefmarkdownRule(event:Event)=position:3abstractclassPricing(ev:Event,p:Float){defevent:Event=evdefprice:Float=pdefprocess}caseclassSubmitPricing(ev:Event,p:Float,ca:String)extendsPricing(ev,p){valcause=caoverridedefprocess={//submittosystem}}caseclassManualPricing(ev:Event,p:Float,so:Pricing)extendsPricing(ev,p){valsource:Pricing=sooverridedefprocess={//recordapply}}Cakepattern(dependencyinjection):1objectPricingextendsPricingServicewithTracer{defapply(ev:Event)={if(isPromoted()){trace("promoted"+ev)}else{valrule=(ev)rule(ev)process}}}Cakepattern(dependencyinjection):2traitPricingService{defgetOppprodu