精华内容
下载资源
问答
  • 可选参数使用函数返回,多个参数用英文逗号分隔 返回:如果必选参数不完整返回false,如果可选参数没指定默认值返回空字符串 支持restful请求 代码如下: /** * 请求参数获取. * User: ...

    比如这样调用getInput方法:
    getInput('a','|b','|c[0]','|d[:date,Y-m-d H:i:s]','|e[:time]');
    表示:获取必需参数 a,可选参数b,可选参数 c 默认值为0,可选参数d,默认值使用函数date返回。


    参数规则:| 表示为可选参数
    [] 可选参数的默认值
    : 可选参数使用函数返回,多个参数用英文逗号分隔


    返回:如果必选参数不完整返回false,如果可选参数没指定默认值返回空字符串


    支持restful请求

    代码如下:

    <?php
    /**
     * 请求参数获取.
     * User: zheng
     *
     *
     */
    
    
    Trait Param
    {
        public function getInput(...$arg)
        {
            $reqParam  = [];
            $reqMethod = $_SERVER['REQUEST_METHOD'];
            switch ($reqMethod){
                case 'GET':
                    $reqParam = $_GET;
                    break;
                case 'POST':
                    $reqParam = $_POST;
                    break;
                default:
                    parse_str(file_get_contents('php://input'), $reqParam);
                    break;
            }
            $reqParam = array_filter($reqParam);
            $returnParam = [];
            foreach ($arg as $val){
                if(false !==strpos($val,'|')){    //是否是必选参数
                    $startPos = strpos($val,'|');
                    $endPos = strpos($val,'[');
                    $param = $endPos?substr($val,$startPos+1,$endPos-1):substr($val,$startPos+1);
                    if(isset($reqParam[$param])){      //参数是否请求
                        $returnParam[$param] = $reqParam[$param];
                    }else{                         //获取默认值
                        if($endPos){
                            $endRight = strpos($val,']');
                            $funStarPos = strpos($val,':');
                            if(false !== strpos($val,':')){   //是否通过函数获取默认值
                                //默认值函数赋值
                                if(false !== strpos($val,',')){  //函数是否有参数
                                    $paramStart = strpos($val,',');
                                    $funParam = substr($val,$paramStart+1,($endRight-($paramStart+1)));
                                    $funName = substr($val,$funStarPos+1,($paramStart-($funStarPos+1)));
                                    $arg = explode(',',$funParam);
                                    $returnParam[$param] =   call_user_func_array($funName,$arg);
                                }else{
                                    $funName = substr($val,$funStarPos+1,($endRight-($funStarPos+1)));
                                    $returnParam[$param] = call_user_func($funName);
                                }
                            }else{
                                $returnParam[$param] = substr($val,$endPos+1,($endRight-(($endPos)+1)));
                            }
                        }else{
                            $returnParam[$param]='';
                        }
                    }
                }else{
                    if(isset($reqParam[$val])){
                        $returnParam[$val] = $reqParam[$val];
                    }else{
                        return false;
                    }
                }
            }
            return $returnParam;
        }
    }
    
    
    //测试
    class TestGet
    {
        use Param;
    }
    
    $test = new TestGet();
    $params = $test->getInput('a','|b','|c[0]','|d[:date,Y-m-d H:i:s]','|e[:time]');
    var_dump($params);
    echo  '<hr/>';
    $params2 = $test->getInput('c');
    var_dump($params2);
    
    展开全文
  • trait在Scala英文翻译为特征,是一种类似于Java中的interface,但又区别于interface。主要区别在于:trait可以定义自己的属性和实现方法体,而interface则不能自己实现方法体。从类的角度来说,它又有点类似于抽象类...

    1、trait是什么?

    trait在Scala英文翻译为特征,是一种类似于Java中的interface,但又区别于interface。主要区别在于:trait可以定义自己的属性和实现方法体,而interface则不能自己实现方法体。从类的角度来说,它又有点类似于抽象类,因为trait就是把一些共同的性质抽象抽来(属性、方法),哪些类需要就继承它,并且有所进化的可以进行覆写(override).

    2、举例说明

    package com.dtspark.scala.basic
    trait Logger{
      def log(message:String){
      println("Logger: "+ message)
      }
    }
    
    trait RichLogger extends Logger{
      override def log(message:String){
      println("RichLogger: "+ message)
      }
    }
    
    class Loggin(val name:String) extends Logger{
      def loggin{
        println("Hi,welcome "+ name)
        log(name)
      }
    }
    
    trait Information{
      def getInformation:String
      def checkIn:Boolean={
        getInformation.equals("Spark")
      }
    }
    class Passenger(val name:String) extends Information{
      def getInformation=name
    }
    
    
    object HelloTrait {
      def main(args:Array[String]):Unit={
        val personLoggin=new Loggin("DTSpark") with RichLogger
        personLoggin.loggin
      }
    }

    代码说明:
    1、 val personLoggin=new Loggin(“DTSpark”) with RichLogger 实现多继承需要用with连接。
    2、代码运行结果
    Hi,welcome DTSpark
    RichLogger: DTSpark

    3、使用trait需要注意的

    super关键字是调用原来的方法(trait里头的)
    例:

    trait SchoolTrait {    
       def study()  
    }  
    
    trait ClassTrait extends SchoolTrait{    
      abstract override def study()={  
        //上课前向老师问好  
        println("=====Hello Teacher=====")  
          //调用原来的处理  
          super.study  
        println("=====Goodbye Teacher=====")  
        //下课后向老师道别  
      }    
    }  

    测试代码:

    class TeachClass extends SchoolTrait{    
      def study(){  
        println("*** start math cource ***");  
      }     
    }    
    object TeachClass {  
      def main(agrs : Array[String]){  
        val test = new TeachClass with ClassTrait  
        test.study  
      }    
    }  

    结果:
    =====Hello Teacher=====
    * start math cource *
    =====Goodbye Teacher=====

    展开全文
  • (书生注:原句:All methods in this trait are defined in terms of an an abstract method, 个人根据上下文,这里应该多了一个“an”) Iterable中的所有方法借助一个抽象方法的被定义...

    collections.png

       在scala集合的整个层级结构,Iterable仅次于Traverable

      (书生注:原句:All methods in this trait are defined in terms of an an abstract method, 个人根据上下文,这里应该多了一个“an”

       Iterable中的所有方法借助一个抽象方法的被定义,该方法是: iterator, 它用于一个一个的产生集合元素。 继承于Traversableforeach方法借助的iterator 实现如下:

    1
    2
    3
    4
    def  foreach[U](f :  Elem  = > U) :  Unit  =  {
       val  it  =  iterator
       while  (it.hasNext) f(it.next())
    }

    Iterable的相当一部分子类都重写了标准的foreach方法,因为他们能够提供更有效的实现。谨记foreach是Traversable所有方法实现的基础,他决定性能好坏。


    Iterator中有两个以上的方法返回迭代器iterators: grouped 和 sliding。 然而这些iterators,不返回单独的元素,而是返回原始集合元素的子序列。这些子序列最大尺寸会作为一个参数给出到这些方法中。grouped以“块”增量的方式返回他的元素,sliding产生一个滑动“window”贯穿所有元素。下面通过REPL【 书生:----读取-求值-输出”循环(英语:Read-Eval-Print Loop,简称REPL 】 的交互式,来让我们清楚的理解他们的区别:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    scala>  val  xs  =  List( 1 2 3 4 5 )
    xs :  List[Int]  =  List( 1 2 3 4 5 )
    scala>  val  git  =  xs grouped  3
    git :  Iterator[List[Int]]  =  non-empty iterator
    scala> git.next()
    res 3 :  List[Int]  =  List( 1 2 3 )
    scala> git.next()
    res 4 :  List[Int]  =  List( 4 5 )
    scala>  val  sit  =  xs sliding  3
    sit :  Iterator[List[Int]]  =  non-empty iterator
    scala> sit.next()
    res 5 :  List[Int]  =  List( 1 2 3 )
    scala> sit.next()
    res 6 :  List[Int]  =  List( 2 3 4 )
    scala> sit.next()
    res 7 :  List[Int]  =  List( 3 4 5 )

    只要迭代器可用,Trait iterable 能够增加一些其他有效的实现到Traversable.


    Trait Iterable中的操作

    WHAT IT ISWHAT IT DOES
    Abstract Method:
    xs.iterator产生xs的任何元素的迭代器。与foreach遍历顺序相同
    Other Iterators:
    xs grouped size一个迭代器,用于产生这个集合固定大小的“块”
    xs sliding size一个迭代器,用于产生该集合元素的一个滑动固定大小的窗口
    Subcollections:
    xs takeRight n xs最后n个元素组成的集合(又或者,如果没有顺序,返回任意n个元素)
    xs dropRight n 除了 xs takeRight n  剩余的元素
    Zippers:
    xs zip ys返回 Iterable[(AB)], 元素是 xs 和 ys中相应的元素对
    xs zipAll (ys, x, y)返回Iterable[(AB)],元素xs 和 ys中相应的元素对,较短的序列将会扩展用语匹配较长的序列,追加元素x 或者 y
    xs.zipWithIndex返回Iterable[(AInt)], 通过他们的索引位置,形成一对元素
    Comparison:
    xs sameElements ys测试xs和ys以同样的顺序包含了同样的元素


    在Trait Iterable下面的集成层次结构中,有三个Trait:  SeqSet, and Map三个接口有个共同点是都实现 PartialFunction接口的applyisDefinedAt方法然而,实现方式又略有不同。


    对于序列(Seq), apply是位置索引,启示是0. 即:Seq(1,2,3)(1) 结果是2.  

    对于Set, apply是对元素的测试 Set('a','b','c')('b')返回是true ,而Set()('a') 返回false. 

    对于Map ,  例子如下: Map('a' -> 1, 'b' -> 10, 'c' -> 100)('b') 返回10











    本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1429182,如需转载请自行联系原作者
    展开全文
  • ...Scala与Java一样有单一的根类,Java通过接口来实现多重继承,而Scala则通过特征(trait)来实现(Scala的特征可以包含实现代码,这当然是与Java接口不同的。不过由于特征自己具有类型的功能,

    (转自http://www.qqread.com/other-devtool/f484284.html)

    与Java相似之处

    Scala类型系统的基础部分是与Java非常相像的。Scala与Java一样有单一的根类,Java通过接口来实现多重继承,而Scala则通过特征(trait)来实现(Scala的特征可以包含实现代码,这当然是与Java接口不同的。不过由于特征自己具有类型的功能,所以对于没有包含实现代码的特征,可以认为与Java的接口是等价的)

    用Trait来实现混入(mix-in)式的多重继承

    Scala里相当于Java接口的是Trait(特征)。Trait的英文意思是特质和性状(本文称其为特征),实际上他比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。Scala中特征被用于服务于单一目的功能模块的模块化中。通过混合这种特征(模块)群来实现各种应用程序的功能要求,Scala也是按照这个构想来设计的。

    一般情况下Scala的类只能够继承单一父类,但是如果是特征的话就可以继承多个,从结果来看就是实现了多重继承。就看一下下面的例子吧。为了辨认方便,此后的特征名称前都加上前缀字母T。特征既可以继承类也可以继承其他特征。

        
    1. class Person ; //实验用的空类
    2. trait TTeacher extends Person {  
    3. def teach //虚方法,没有实现  
    4. }  
    5. trait TPianoPlayer extends Person {  
    6. def playPiano = {println("I’m playing piano. ")} //实方法,已实现  
    7. }  
    8. class PianoplayingTeacher extends Person with TTeacher with TPianoPlayer {  
    9. def teach = {println("I’m teaching students. ")} //定义虚方法的实现  
    10. }  
    如上所示,可以连着多个with语句来混合多个特征到一个类中。第一个被继承源用extends,第二个以后的就用with语句。正如大家所知道的,可以生成实例的是非抽象(abstract)的类。另外请注意一下从特征是不可以直接创建实例的。

    那么就实际运行一下吧。

     

        
    1. scala> val t1 = new PianoplayingTeacher  
    2. t1: PianoplayingTeacher = PianoplayingTeacher@170a650 
    3. scala> t1.playPiano  
    4. I’m playing piano.  
    5. scala> t1.teach  
    6. I’m teaching students.  
    实际上如下所示,可以在创建对象时才将特征各自的特点赋予对象。

     

     

        
    1. scala> val tanakaTaro = new Person with TTeacher with TPianoPlayer {  
    2. | def teach = {println("I'm teaching students.")} }  
    3. tanakaTaro: Person with TTeacher with TPianoPlayer = $anon$1@5bcd91 
    4. scala> tanakaTaro playPiano  
    5. I’m playing piano.  
    6. scala> tanakaTaro teach  
    7. I'm teaching students.  
    用特征来方便地实现面向方面的编程

     

    充分利用特征的功能之后,就能方便地实现现今流行的面向方面编程(AOP)了。

    首先,用特征来声明表示基本动作方法的模块Taction。

     

        
    1. trait TAction {  
    2. def doAction  
    3. }  
    接着作为被加入的方面,定义一下加入了前置处理和后置处理的特征TBeforeAfter。

     

     

        
    1. trait TBeforeAfter extends TAction {  
    2. abstract override def doAction {  
    3. println("/entry before-action") //doAction的前置处理  
    4. super.doAction // 调用原来的处理  
    5. println("/exit after-action") //doAction的后置处理  
    6. }  
    7. }  
    通过上面的abstract override def doAction {}语句来覆盖虚方法。具体来说这当中的super.doAction是关键,他调用了TAction的doAction方法。其原理是,由于doAction是虚方法,所以实际被执行的是被调用的实体类中所定义的方法。

     

    那么将实际执行的实体类RealAction作为TAction的子类来实现吧。

     

        
    1. class RealAction extends TAction {  
    2. def doAction = { println("** real action done!! **") }  
    3. }  
    接着就执行一下。

     

     

        
    1. scala> val act1 = new RealAction with TBeforeAfter  
    2. act1: RealAction with TBeforeAfter = $anon$1@3bce70 
    3. scala> act1.doAction  
    4. /entry before-action  
    5. ** real action done!! **  
    6. /exit after-action  
    仅仅这样还不好玩,接着为他定义一下别的方面,然后将这些方面加入到同一对象的方法中。接着定义一个将源方法执行两遍的方面。

     

     

        
    1. trait TTwiceAction extends TAction {  
    2. abstract override def doAction {  
    3. for ( i <- 1 to 2 ) { // 循环执行源方法的方面  
    4. super.doAction // 调用源方法doAction  
    5. println( " ==> No." + i )  
    6. }  
    7. }  
    8. }  
    下面,将TBeforeAfter和TtwiceAction混合在一起后执行一下。

     

     

        
    1. scala> val act2 = new RealAction with TBeforeAfter with TTwiceAction  
    2. act2: RealAction with TBeforeAfter with TTwiceAction = $anon$1@1fcbac1 
    3. scala> act2.doAction  
    4. /entry before-action  
    5. ** real action done!! **  
    6. /exit after-action  
    7. ==> No.1 
    8. /entry before-action  
    9. ** real action done!! **  
    10. /exit after-action  
    11. ==> No.2 
    伴随着原来方法的before/after动作一起各自执行了两次。接着将混入顺序颠倒后再试一下。

     

     

        
    1. scala> val act3 = new RealAction with TTwiceAction with TBeforeAfter  
    2. act3: RealAction with TTwiceAction with TBeforeAfter = $anon$1@6af790 
    3. scala> act3.doAction  
    4. /entry before-action  
    5. ** real action done!! **  
    6. ==> No.1 
    7. ** real action done!! **  
    8. ==> No.2 
    9. /exit after-action  

     

    这样执行后,原来的实现方法被循环执行了两次,但是before/after则在循环以外整体只执行了一次。这是根据with语句定义的顺序来执行的,知道了这原理之后也就没有什么奇怪的了。Scala特性的如此混入顺序是和AspectJ的方面以及Spring的interceptor相同的。

    这样不仅是before和after动作,只要更改了特征的实现就可以将各种方面动态地加入到原来的对象中去了,读者自己也可以尝试一下各种其他情况。

    在Java中通过Decorator或Template Method模式来想尽办法实现的功能,在Scala中只要通过特征就可以轻松到手了。从这还可以延展开来,通过在原来的方法中插入挂钩的方法,即所谓的拦截者式面向方面的方法,就可以轻松地将各个方面通过特征来组件化了。

    请读者如果想起Scala是怎样的强类型和静态化语言的话,那么就能够明白通过特征来加入新功能的特点给他带来了多大的灵活性。

    展开全文
  • scala学习trait

    千次阅读 2016-06-01 22:37:18
    Trait英文意思是特质和性状),实际上他比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。Scala中特征被用于服务于单一目的功能模块的模块化中。通过混合这种特征(模块)群来实现各种应用程序的...
  • Scala 有趣的Trait

    2014-07-10 16:19:32
    与Java相似之处 ...Scala与Java一样有单一的根类,Java通过接口来实现多重继承,而Scala则通过特征(trait)来实现(Scala的特征可以包含实现代码,这当然是与Java接口不同的。不过由于特征自己具有类型
  • Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。  Trait是 PHP 多重继承的一种解决方案。例如,需要同时继承两个 Abstract Class, 这将会是件很麻烦的事情,...
  • trait的方法的延迟绑定就是先混入的trait的方法会后调用。这一点从上一节的实例中也可以看出来。 下面再来看一个类似的例子: abstract class Writer { def write(message: String): String } trait ...
  • yield to 让位于,屈服于 adaptiveness 适应能力,适应性 additional 额外的。新的 adjoin 毗连,靠近 adjust to 适应 administration 管理局,(一届)政府;行政管理 adopt 收养,采用 prospect 前景 ...
  • 兼容iOS 10 _升级xcode8_适配(四)

    千次阅读 2016-09-21 11:26:18
    1.Notification(通知) 自从 Notification 被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到 UserNotifications 的易用,功能也变得...
  • IT行业英语自我介绍必备

    千次阅读 2019-05-08 22:15:33
    A:The trait is needed in my current(or previous) position and I know I can handle it well. (这种特点就是我目前(先前)工作所需要的,我知道我能应付自 如。) Q:What is your strongest trait(s)?(你...
  • Traits——为Python添加类型

    千次阅读 2018-07-31 09:20:46
    可以看到属性按照其英文名排序,垂直排为一列。由于father属性是Parent类的实例,所以它给我们一个按钮,点此按钮出现下面的设置father对象的tratis属性的对话框: 在上面这个对话框中修改father的Last name,...
  • 标签(空格分隔): 文献阅读及英文写作 一.禁忌 二.词汇 三.词组 四.写作技巧 六.问句写法及精句 七.时态 八.常见的连词 转载和疑问声明 终于写完了,赞赏一下下嘛! 我祝各位帅哥,和美女,你们永远十八岁,嗨...
  • A:The trait is needed in my current(or previous) position and I know I can handle it well. (这种特点就是我目前(先前)工作所需要的,我知道我能应付自如。) Q:What is your strongest trait(s)?(你...
  • Traits-为Python添加类型定义

    千次阅读 2016-01-30 22:34:53
    答案是否定的,请记住trait属性像类的属性一样定义,像实例的属性一样使用,我们不管HasTraits是如何实现这一点的,先来看看如何使用trait属性: >>> c = Circle () >>> Circle . color Traceback...
  • including Swift 3, designing adaptive user interfaces using trait variations, iMessage apps, CloudKit sharing, speech recognition, and SiriKit integration.The aim of this book, therefore, is to teach...
  • ylbtech-语言-英语-美国英语:美国英语 美国英语(American English或USA English(USEnglish),简称AE、AmE)又称美式英语,简称美音。是在美国使用的一种英语形式。它在美国是最主要的语言。 根据1990年...
  • 五个字的英语单词

    万次阅读 2014-09-29 17:55:13
    abide v.(by)坚持,遵守 about ad. 在周围,附近,到处;大约,差不多 prep. 关于,对于;在……周围,在……附近 a.... above prep. 在……上面,超过,高于a....abuse v./n....actor n....acute a....adapt v.(to)(使)适应
  • 通过Haxe脚本实现相机的移动和旋转功能,参考代码如下: // 相机旋转,设定lookAt目标示例 package arm; import iron.math.Quat; import iron.object.Object;...class MyTrait extends iron.Trait { var ca...
  • 计算机常用【快捷键、缩写、英语单词】 Windows Office Excel Linux Python 机器学习 深度学习 Java SQL IDE
  • 61) almost几乎behavior行为trait特点 , tanmaurk丹麦 , trace跟踪 62) explain解释explanation解释,hard困难, remain保持, obscure模糊; 63) evolution进化, revolution革命, innovation革新...
  • Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集 这个断句让我断了好久,也是醉了。不管那么多,理解成是用来用来解决PHP不能多重继承而添加的一种代码复用机制就OK了...
  • Tree 定义 简化定义Scala Tree结构,包含两个部分: Branch和Tree。为了简化数据结构,Branch只包含 Tree...sealed trait Tree[+A] case class Leaf[A](value: A) extends Tree[A] case class Branch[A](left: Tre...
  • 英语单音节词

    千次阅读 2019-10-16 15:25:24
    [20]ait bait gait plait strait trait wait [21]ak flak yak [22]ake bake brake cake fake shake slake ake wake [23]ald bald scalk [24]ale ale bale gale sale scale tale whale [25]alf calf ...
  • 2020年管理类联考MBA/MEM英语大作文范文模版 As is apparently demonstrated in the chart above, we are informed some information concerning college students reading intentions with mobile phones in a ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,300
精华内容 520
关键字:

trait英文