弄了弄scala

如果把裸体看作计算机的本质的话,程序语言就是衣服。

如果把汇编比喻成最原始的树叶衣服的话(这种衣服想遮那,挡那),那么C语言就是最原始的编织物的衣服了。也就是说,C语言已经出现成块的布了,用这些布我们可以拼凑出各种形制来。
那么java,我觉得最象一个漂亮的裙装(短裙性感的那种),而scala则象现在混搭的穿衣风格。
抱歉,纯函数式(比如scheme)的我曾经用过一些,只是觉得可读性太差,写起来实在是不习惯。这些东西在我看来更像穆斯林的服装,全身都裹着,虽然统一,但却郁闷。

这两天,我在研究scala,主要是读《program in scala》,再写一些测试的代码。
并且把我原来用java写的一个程序改成了scala。
我确实很喜欢这种混搭的风格,而且,scala内在的,从概念上,很统一。
其实,它的思想还是oo的,只不过它把函数也作为一种对象独立出来罢了。
不过,scala的编译器做的比较技术,也就是说,它的语法弄得比较灵活,但却并不显得复杂。
比方说,你可以println("hello"),也可以println "hello",也可以println {"hello"}。
虽然如此,它并没有违背它的核心理念,也就是“every thing is object,every operate is method”。这是语法分析和语义分析的区别,也就是说,把所有的形式翻译成,对象和方法的结构(语义),再以这种理念来树立语言的核心精神。这使得scala变得统一,它只加入了几个控制语句,其他的都交给对象和函数系统。它并没有象scheme一样执着,而是适当的加入了那么几个控制语句,这是我欣赏的地方——不要拘泥于什么东西。当然这几个语句不是对象,不过,不用担心,编译器会把他们变成对象的——我是这么理解的。
scala编译器的一个非常方便的功能是类型的推导,这减少了敲代码的量,并且使代码容易理解,感觉非常的自然。你认为编译器应该能明白的,它就能明白,就是这样。

这是我写的一个小例子,这是个hello world加强版:

import scala.collection.mutable.Set
class Dog[T](var color: String){
val childs=Set[T]()
def apply()="""hello dog every day is holeday,dkkskdkfs
dskdkskdksk"""
def add(x: Int,y: Int):Int={
x+y
}
def hello(dog: String){
println("hello dog! "+dog)
}
def pf(p: PartialFunction[Any,Unit]){
//注意,“部分函数”这个东西
p.apply(color)
}
def an(body: => Unit){
body
}
def lookat(){
println("i am in Dog, and i am lookat")
}
}
object Main extends Application{
val mydog=new Dog[Int]("green"){
override def lookat(){
println("i am lookat")
}
}//this is a Refinement
println(mydog.color)
mydog.color="red"//not need java's getter and setter
println {mydog()}//对象的函数式用法,调用apply方法
println(mydog.add(1,2))
mydog hello "ddkks"
mydog hello { "sssss" }
mydog hello ("mmmmms") //单参数的多种调用方法
mydog pf {case "green" => println("ooooooo喵ooooooo")}//case block会被编译成一个PartialFunction,这种形式在Actor里很常见
mydog an { println("ok,ok,ok") }//这是个Call-by-name
mydog.childs+3
mydog.childs+4//集合Set的使用
mydog.childs.foreach(println)
mydog.lookat
mydog.asInstanceOf[Dog[Int]].lookat//asInstanceOf[SomeType]和java的强制转型是一样的
}

这仅仅是九牛一毛。
scala的好多特性我都没用到,不过,这是基本的,我觉得至少要知道这些。
还有好多地方我还不知道该怎么用,功能确实比较繁杂。

scala的话,ide的支持不行(我发现象eclipse的java环境那么好的东西,实在是凤毛麟角),所以ant是必不可少的。再搞个编辑器就行了,scala支持好多编辑器。
顺便提供我的build.xml,供参考:

<project name="scala play" default="run" basedir=".">
<property name="sources.dir" value="src" />
<property name="build.dir" value="build/classes"/>
<property name="lib.dir" value="lib"/>
<property environment="env"/>
<property name="scala.home" value="${env.SCALA_HOME}" />
<target name="init">
<property name="scala-library.jar" value="${scala.home}/lib/scala-library.jar"/>
<mkdir dir="${build.dir}"/>
<mkdir dir="${sources.dir}"/>
<mkdir dir="${lib.dir}"/>
<path id="build.classpath">
<pathelement location="${scala-library.jar}"/>
<pathelement location="${build.dir}"/>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<taskdef resource="scala/tools/ant/antlib.xml">
<classpath>
<pathelement location="${scala.home}/lib/scala-compiler.jar" />
<pathelement location="${scala-library.jar}" />
</classpath>
</taskdef>
</target>
<target name="build" depends="init">
<scalac srcdir="${sources.dir}"
destdir="${build.dir}"
classpathref="build.classpath"
deprecation="yes"
encoding="gbk">
</scalac>
</target>
<target name="test" depends="build">
<java classname="Main"
fork="true"
classpathref="build.classpath">
</java>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值