`

Scala简单介绍整理

 
阅读更多

最近在看《七周七语言》,适当了解一些C语言家族以外的编程语言也很有意思,下面记录一下各个语言的语法特点。

首先在/etc/hosts配置 127.0.0.1       [主机名]

scala结合面向对象和函数式两种编程范型,运行在JVM上

一,scala打开交互命令行,或者scala [filename.scala]执行

// 编译期间进行类型检查
def Loop {
        var i = 0
        while(i < args.length) {
                println(args(i))
                i = i + 1
        }

        for(i <- 0 until args.length) {
                println(args(i))
        }

        args.foreach { arg =>
                println(arg)
        }
}
Loop

二,范围/元组

//通过元组赋值
> val (a,b) = (1,2)
a: Int = 1
b: Int = 2
> val fruits = ("apple","banana")
fruits: (java.lang.String, java.lang.String) = (apple,banana)
> fruits._1
java.lang.String = apple
> fruits._2
java.lang.String = banana

三,并发demo

主要结构包括actor和消息传递,actor拥有线程池和队列池。当发送一条消息给actor时,是将一个对象放到该actor的队列中,actor读取消息并采取行动。

import scala.actors._
import scala.actors.Actor._

case object Poke
case object Feed

class Kid() extends Actor {
  def act() {
    react {
      case Poke => {
        println("aaa")
        act
      }
      case Feed => {
        println("bbb")
        act
      }
      case Exit => {
        println("exit")
      }
    }
  }
}

val bart = new Kid().start
val lisa = new Kid().start

bart ! Poke
lisa ! Poke
bart ! Feed
lisa ! Feed
bart ! Exit
lisa ! Exit

并发获取多个网页大小测试如下:

import scala.io._
import scala.actors._
import scala.actors.Actor._

//抓取网页计算大小
object PageLoader {
  def getPageSize(url: String) = Source.fromURL(url).mkString.length
}

val urls = List("http://www.baidu.com",
		"http://www.sogou.com",
		"http://www.so.com")

//计时函数
def timeMethod(method: () => Unit) = {
  val start = System.nanoTime
  method()
  val end = System.nanoTime
  println("Method took " + (end - start)/1000000000.0 + " seconds.")
}

def getPageSizeSequentially() = {
  for(url <- urls) {
    println("Size for " + url + " : " + PageLoader.getPageSize(url))
  }
}

def getPageSizeConcurrently() = {
  val caller = self
  
  for(url <- urls) {
    actor { caller ! (url, PageLoader.getPageSize(url)) }
  }

  for(i <-1  to urls.size) {
    receive {
      case (url, size) =>
        println("Size for " + url + " : " + size)
    }
  }
}

println("Sequential run:")
timeMethod { getPageSizeSequentially }

println("Concurrent run:")
timeMethod { getPageSizeConcurrently }

/*
执行结果如下
Sequential run:
Size for http://www.baidu.com : 10219
Size for http://www.sogou.com : 6702
Size for http://www.so.com : 17476
Method took 1.476279371 seconds.
Concurrent run:
Size for http://www.baidu.com : 10209
Size for http://www.sogou.com : 6702
Size for http://www.so.com : 17476
Method took 0.430095069 seconds.
*/

总结:

1,actor模型和线程池使用非常方便,消息传递语法与erlang类似

2,可以直接使用java库

其他参考

Getting Started with Scala

构建可伸缩系统 Scala vs Java

Code Examples for

Programming in Scala

嵌入shell脚本

#!/bin/sh
exec scala "$0" "$@"
!#
object HelloWorld {
        def main(args: Array[String]) {
                println("Hello, world! " + args.toList)
        }
}
HelloWorld.main(args)
运行方式:
1,解释方式运行,源代码不能加package,(foo/bar/Hello.scala)
object Hello {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}
$ scala foo/bar/Hello.scala

2,编译运行方式,源代码可加package,(class文件生成在源代码目录)
package foo.bar{
	object Hello {
	  def main(args: Array[String]) {
	    println("Hello, world!")
	  }
	}
}
$ scalac foo/bar/Hello.scala
$ scala foo.bar.Hello

3,编译运行方式,源代码不加package,(代码及目录同1)(class文件生成在当前目录)
$ scalac foo/bar/Hello.scala
$ scala Hello
  调用java做成的jar包
//demo/Hello.java
package demo;

public class Hello {

	public void Say(String name){
		System.out.println("Hello "+name);
	}
	
	public static void main(String[] args) {
		System.out.print("Yes");
	}
}

//foo/bar/Hello.scala
import demo._;

object Hello {
	def main(args: Array[String]) {
		val m = new Hello();
		m.Say("PJ");
		println("Hello, world!")
	}
}
$ javac demo/Hello.java
$ jar -cf demo.jar demo/
$ scala -cp demo.jar foo/bar/Hello.scala
Hello PJ
Hello, world!
 附:命令行jar打包(指定manifest文件及指定main函数入口Main-Class: demo.Hello)如下:
jar cvfm demo.jar MANIFEST.MF demo.Hello demo
分享到:
评论

相关推荐

    最新整理的大数据scala和spark视频教程

    这份“最新整理的大数据scala和spark视频教程”为想要深入理解和掌握这两个工具的学习者提供了宝贵的资源。 Scala(Scalable Language)是一种多范式编程语言,融合了面向对象和函数式编程的特性。它由Martin ...

    Simple Scala DSLs,PPT

    Simple Scala DSLs,PPT,下载整理,最小分值。内容比较简单。

    scala by examples

    3. 模式匹配:Scala中的模式匹配非常强大,它不仅可以应用于简单的值,还可以应用于类层次结构。这一特性使得Scala在处理复杂数据结构时更为灵活和强大。 4. 函数式编程特性:Scala提供了丰富的函数式编程支持,...

    Manning Early Access Program Functional Programming in Scala 10

    - Monoids:介绍了一个简单的抽象概念,即在保持操作的结合律下,一个可以进行组合的数据结构。 - Monads:在函数式编程中,Monads是处理副作用和复杂性的一种强大抽象,是函数式编程中非常重要的概念。 - ...

    Objectify.scala:Objectify是一个轻量级的Web框架,可通过提供策略管理和依赖项注入来帮助您构建应用程序

    这是我在Scala见面会上快速介绍的内容,它是关于所有内容的想法:Scala见面会 注意:当前唯一随附的适配器用于 ,请随时添加更多! :)我为什么要用这个? 该框架的灵感来自类似命名的。 当我们单独使用Scalatra时,...

    scalaQuery18情况总结代码

    这个“scalaQuery18情况总结代码”很可能是一个开发者在学习和使用ScalaQuery v1.8版本时所做的笔记和示例集合,经过两天的学习、实践和调试后整理出的成果。 在ScalaQuery中,主要的知识点包括: 1. **基本概念**...

    Spark面试【梅峰谷】系列整理

    优点:部署简单,不依赖其他资源管理系统。 缺点:可能有单点故障,需要自己配置 master HA。 调度模式 1. FIFO 调度模式 基本原理:按照先后顺序决定资源的使用,资源优先满足最先来的 job。 优点:适合长作业,...

    Spark_SQL 电影受众分析系统数据

    在本系统中,我们关注的是电影受众分析,这涉及到收集、整理和分析与电影观众行为相关的数据。Scala是Spark的主要编程语言,它是一种静态类型的JVM语言,以其强大的函数式编程特性而被广泛用于大数据处理。 **一、...

    jvm-978-1-7888-3451-3:JVM语言简介-JVM,Java,Scala [视频]

    它的设计哲学是简单性、健壮性和安全性。Java语法清晰,易于学习,同时提供了丰富的类库支持。Java程序经过编译后生成.class文件,这些文件包含了平台无关的字节码,可以在任何支持JVM的系统上运行。 【JVM内存结构...

    playwebframework框架学习文档整理.pdf

    总结来说,Playframework学习文档整理了如何使用该框架构建Web应用,它使用了MVC设计模式,并对RESTful架构提供了良好的支持,同时集成了WebSockets和Hibernate等技术,为开发提供了一个全功能的开发环境。...

    spark mllib 文本特征提取

    里面包含四种模型(word2vec TF-IDF LDA CountVectorizer) 的helloworld代码和模型简单介绍,都是基于spark mllib的,包含python版本、scala版本和java版本的,是我运行通过后,整理成pdf的。这些代码没有问题,一般...

    photo-timeline:在AVI的支持下,按时间整理和查看个人照片

    我已经厌倦了将照片手动整理到文件夹或相册中的工作,并且需要一个自动任务来将媒体文件从相机传输到PC上的照片文件夹中。我能想到的最简单的方案是按创建时间排序,然后按月分组。该系统相对易于实施,并为我工作。...

    21春南开大学《大数据开发技术(二)》在线作业参考答案.docx

    以上就是从给定文件中整理出的主要知识点,包括Scala列表方法、Spark MLlib线性回归算法参数、Spark GraphX图处理、PairRDD操作、DStream窗口操作、图的基本概念以及Scala面向对象特性等。这些知识点对于学习和掌握...

    opencv教材

    - **项目初始化**:介绍如何使用SBT(Scala Build Tool)创建包含Java和Scala示例的新项目。 - **代码示例**:提供具体的代码示例,演示如何在Java和Scala中使用OpenCV库。 **1.12 写一个简单的应用** - **应用...

    play框架文档(英文版)

    Play框架支持多种编程语言,包括Java和Scala,使其成为开发高效Web应用的理想选择。 ### Play框架核心概念与功能 #### 主要概念 - **MVC应用模型**:Play框架遵循模型-视图-控制器(MVC)架构模式,将业务逻辑、...

    kotlin-data-science-resources:整理图书馆,媒体,链接和其他资源以将Kotlin用于数据科学

    Kotlin数据科学资源图书馆,媒体,... 项目描述一个从头开始的Kotlin机器学习算法的简单演示以及库实现如何将数学符号表达式转换为Kotlin代码可视化的Kotlin演示,客户等待时间模拟器模拟指定数量的收银员的客户等待时

    IntelliJ IDEA 2020.1.4 x64官方

    "Go to"功能(如Go to Declaration)使得快速跳转到代码定义变得简单。 6. **单元测试**:内置JUnit和TestNG支持,方便编写、运行和调试单元测试,确保代码质量。 7. **集成开发环境**:集成了构建工具(如Maven、...

    HHVM是如何提升PHP性能的?

    HHVM是Facebook开发的高性能PHP虚拟机,宣称比官方的快9倍,我很好奇,于是抽空简单了解了一下,并整理出这篇文章,希望能回答清楚两方面的问题:1.HHVM到底靠谱么?是否可以用到产品中?2.它为什么比官方的PHP快很...

    The Java Virtual Machine Specification 3rd

    - JVM能够支持多种动态类型语言,如Groovy、Scala、Ruby等,这些语言可以与Java代码无缝集成。 - 通过引入新的类文件格式和字节码指令,增强了JVM对于动态类型语言的支持能力。 3. **模块系统(Module System)** ...

Global site tag (gtag.js) - Google Analytics