ognlStudy

本文详细介绍了OGNL表达式的多种特性及其应用场景,包括导航链、简化JavaBeans的get/set机制、变量机制、集合操作及特殊属性等。同时,还探讨了OGNL与Java运算符的不同之处,以及如何在表达式中进行类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

OGNL特性:

1,一个OGNL      表达式的基本组成是:navigation chain。组成如下:

       Properity name

       Method calls

       Array Indices

       如:name.toCharArray()[0].numericValue.toString()

       name.toCharArray()转化为数组;

       numericValue相当于Character类的getNumericValue()方法:static int getNumericValue(char ch);

 

2,简化JavaBeansget/set机制

       如:public Object getAttribute(String name)

              public void setAttribute(String name, Object value)

       简化为:session.attribute[“foo”]

 

3OGNL有一个简化变量机制(在变量前加符号#),所有OGNL变量在整个表达式里是全局的。

       如:#var

              #var = 99

              listeners.size().( #this > 100 ? 2 * #this : 20 + #this ) 调用listenerssize()并与100比较。

 

4chain subexpressions

       如:headline.parent.(ensureLoaded(), name)

              headline.parent<-root object

        ensureLoaded()root object调用,然后set/get name property

 

5Maps

    可以这样创建一个Map

    #{“foo”: “foo value”, “bar”: “bar value” }

    #@java.util.LinkedHashMap@{“foo”: “foo value”, “bar”: “bar value” }

 

6Projecting Across Collections

    从一个Collection中的每一个元素里提取或调用相同的方法或property,然后将结果储存为一个新的collection,称为projection

    Listeners.{delegate} 返回一个List,这个Listlisteners中所有delegate的集合。

    Objects.{#this instanceof String ? #this : #this.toString} 创建一个新的List,并将Object List中所有元素转换为String,存入新的List

 

7,检查List的第一和最后一个元素。

    Listeners.{?ture}[0] 这样可以检测,但是如果是一个空List,就会发生ArrayIndexOutOfBoundsException。为防止这种情况,可以用下面方式检测第一个和最后一个元素:

    Objects.{^#this instanceof String} 第一个元素

    Objects.{$#this instanceof String} 最后一个元素

 

8,调用静态方法

    @Class@method(args)

    如果Class不指明,默认为java.lang.Math

    也可以用实例化的方式来调用静态方法。

    同样,调用静态成员变量的方法为:@Class@field

 

9#fact(30H) <-注意与#fact.(30H)的区别。

    如果一个OGNL表达式在括号前没有逗号,那么OGNL会把第一表达式的结果作为另一个表达式来赋值,而括号中表达式的结果会作为root object指向那个表达式。

    如:#fact(30H) <- 查找fact 变量,将这个变量解析为一个OGNL表达式,使用30H作为该表达式的root object

    fact(30H) <-令人混淆的用法,OGNL可能会将其作为一个方法调用。

    (fact)(30H) <-调用fact方法。

 

10,虚拟Lambda表达式(Pseudo-Lambda Expression

    OGNL有一个简化的Lambda表达式句法,能够让你写一些简单功能。需要注意的是,所有OGNL变量是全局范围的。

    如:#fact=:[#this<=1 ? 1 : #this*#fact(#this-1)],#fact(30H)

        这是一个OGNL表达式,声明一个递归功能函数,然后调用它。[]中的是Lambda表达式, #this变量指向的是初始化30H的表达式。OGNLLambda表达式作为常量来处理。Lambda表达式的值是一个OGNL使用的AST

 

11, 虚拟 Properties集合(Pseudo-Properties

    OGNL将集合中的一些特殊Properties变为可利用,因为集合并不遵循JavaBean模式的命名规则。

Collection

Special Properties

Collection (Map,List,Set继承)

Size

isEmpty

List

iterator

Map

keys

values

注意:这些properties附加size isEmpty,不同于索引形式访问Maps, 如someMap[“size”]Map中获得 “size”key,而someMap.size得到Map的大小

Set

iterator

Iterater

naxt

hasNext

Enumeration

next

hasNext

nextElemet

hasMoreElement

 

12Operators不同于Java

       OGNL operator伪造于JAVA,并有相似的工作机制,下面是与JAVA不同的地方。

1)  comma(, )或序列Operator,来源于C, 逗号被用来分隔两个表达式,第二个表达式的值是这个comma表达式的值。

如:ensureLoaded(), name

        调用ensureLoaded()方法,然后get/set name property

       2) {} 来构造List

              如:{null, true, false }

       3) in operator ( not in , in的相反),这是用来检测某个值是否在集合中。

              如:name in { null, “Untitled “ } || name

 

13getting value setting value

       并不是所有能够get的值都可以set

       如:names[0].location   <-这是一个set表达式。

names[0].length+1  <-这个表达式不能set,因为他不能解析为一个object,而仅仅是一个是单的计算。

 

14,将Object强制转换为各种类Tpye

1)  转换ObjectsBoolean

l         如果Object是一个Boolean,获得值并返回;

l         如果Object是一个Number,它的双精度浮点数将与 0 比较,非 0 处理为false 0处理为ture

l         如果ObjectCharacter,仅当其值为非0时为ture

l         其它的Object,仅当其值为非0时为ture

2)  转换ObjectNumbers

数字运算符试图将其参数处理为numbers。基本的原始类型封装类(Integer, Double等,包括被处理为IntegerCharacterBoolean),和java.math包的 “big” numeric classesBigIntegerBigDecimal),被认可的特殊数字类型。某个类的一个对象,OGNL解析这个对象的string值为一个number

数字运算符通过两个参数并使用下面的算法,以决定运算结果的转换类型。如果结果超出给定类型,那么这个类型的实际结果范围可能很广。

l         如果两个参数都是同一个类型,那么结果将尽可能为同一个类型。

l         如果其中一个参数不是认可的数字类型(Float, Double,BigDecimal),则结果会是两个参数中的最大范围类型。

l         如果两个参数是real number的近似值 (Float, Double, BigDecimal),则结果为两个参数中的最大范围类型。

l         如果两个参数都是integers (Boolean, Byte, Character, Short, Integers, Long BigInteger ),则结果为两个参数中的最大范围类型。

l         如果一个参数为real type 而另一个参数为integer type 结果将会是real type,如果integer小于 “int”,结果将会是BigDecimal,如果integerBigInteger,或者大于real typeDouble

3)  转换Object Integers

运算符仅操作integers,比如位操作符,将其参数处理为numbers, 除了BigDecimalsBigIntegers被处理为BigIntegers,其它所有的numbers被处理为Longs。对于BigInteger情况,处理结果仍然保持为Biginteger,对于Long情况,结果被处理为与参数相同的类型。

4)  转换ObjectsCollections

projectionselection operators e1.{e2}e1.{?e2} , in 运算符,都将它们的其中一个参数处理为一个collection并遍历。根据参数的不同,有不同的处理方式。

l         Java arrays从头至尾遍历。

l         Java.util.Colleciton的成员通过遍历它们的iterations来实现遍历。

l         Java.util.Map的成员通过遍历它们的iterators越过他们的value来实现遍历。

l         java.util.Iteratorjava.util.Enumeration的成员通过iterate它们来实现遍历。

l         java.lang.Number的成员遍历的方式为:从0开始,返回的integers小于给予的number

l         所有其它objects被处理为单独的collections,包括它们自己。

内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 单点定位是卫星导航技术的核心方法,通过接收卫星信号来确定接收器在地球上的位置。它主要涉及分析卫星发射的时间戳、伪距以及卫星轨道信息。MATLAB凭借其强大的数值计算和数据处理能力,可以用来编写程序实现单点定位。RINEX(Receiver Independent Exchange Format)观测文件是一种通用格式,用于存储各种接收机产生的观测数据,如伪距、载波相位和多普勒频移等,便于不同软件进行数据交换和处理。 在MATLAB中实现单点定位的程序通常包括以下步骤:首先,读取RINEX观测文件,解析卫星信号数据,包括处理文件头信息、识别有效观测时段以及提取卫星ID、伪距和时间戳等关键信息。其次,利用星历数据计算卫星在特定时间的位置。星历数据由卫星导航系统地面站提供,包含卫星的精确轨道参数。接下来,对原始伪距进行改正,考虑大气延迟、卫星钟偏和接收机钟偏等因素,这需要对大气折射率进行建模以及估计卫星和接收机的时钟误差。然后,基于改正后的伪距,利用三角定位原理计算接收机的位置,通常采用最小二乘法或其他优化算法来获得最佳解。最后,将计算出的接收机位置与已知点坐标进行比较,评估定位精度,并以经纬度、海拔高度等形式输出结果。 在MATLAB程序single_point_position.m中,可以看到上述步骤的具体实现。代码可能包含RINEX文件解析函数、卫星轨道计算模块、伪距改正函数以及定位计算和输出部分。通过学习和理解该源码,不仅可以深入掌握单点定位原理,还能提升MATLAB编程和处理导航数据的能力。单点定位在实际应用中常用于初步定位或作为更复杂定位方法的基础,如差分定位和动态定位。它在科学研究、导航设备测试和大地测量等领域具有重要价值。通过不断优化这些程序,可以提高定位精度,满足实际需求。
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c Verilog-A是一种高级硬件描述语言,广泛应用于模拟和混合信号电路设计。它具备强大的数学运算能力,能够精确地描述电路的行为和特性。在“用Verilog-A编写的电路模块示例”压缩包中,包含了多种重要的电子电路元件模型,例如PLL(锁相环)、resistor(电阻)、bjt(双极型晶体管)、opamp(运算放大器)、psfet(P沟道金属氧化物半导体场效应晶体管)、deadband(死区)以及sinewave(正弦波)生成器。以下是对这些模块的详细说明。 PLL(锁相环):PLL是数字通信系统中的关键部件,主要用于使接收端的时钟频率与发送端的信号频率同步。通过Verilog-A,可以精确描述PLL的各个组成部分,如压控振荡器(VCO)、分频器、鉴相器和低通滤波器。设计者能够利用Verilog-A精确控制PLL的动态特性,例如环路带宽和锁定时间等。 Resistor(电阻):在Verilog-A中,电阻模型定义了电流与电压之间的关系,遵循欧姆定律。设计者可以指定电阻的温度系数和其他非线性特性,从而更真实地模拟实际电路中的电阻行为。 BJT(双极型晶体管):BJT是模拟电路中的基础元件,具有电流控制电流的特性。在Verilog-A中,BJT模型需要描述基极、发射极和集电极之间的电流关系,以及BJT的放大系数和非线性特性。 Opamp(运算放大器):运算放大器是模拟电路设计的核心元件,常用于信号放大或构建反馈电路。在Verilog-A中,opamp模型包括输入失调电压、增益、共模抑制比等关键参数,以及理想化特性,如无限输入阻抗和零输出阻抗。 Psfet(P沟道金属氧化物半导体场效应晶体管):P沟道MOSFET是数字和模拟电路中的常见开关元件。Verilog-A模型需要描述其阈值电压、亚阈值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值