手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Scala & Ruby

scala之hello world调试成功【基于netbeans IDE】

让我幸福的是,在netbeans写的hello world编译成功了。原来一直没有成功过。介绍一下出错情况,免得有人再走冤枉路吧。。

1、由于我是采用了netbeans for php,因此在安装的scala插件时提示我没有JDK,下载完JDK后,在netbeans/etc/netbeans.conf中指定jdk的路径

2、重启netbeans,进入插件栏,再选择scala。

3、会帮我安装涉及到的一些包,大约有10个左右(没事,这个是自动识别的)

4、安装完重启后,再进行插件栏,选择Scala,终于可以安装了。

5、新建Scala项目,会有一个简单的hello world,OK,直接按F6进行调试,会发现错误,告诉你没有在启动的时候设定Dscala.home的路径。

6、下载scala源码(好象用2.8的较好吧?),扔到某个目录下。如:d:\program files\scala,修改netbeans/etc/netbeans.conf文件,在netbeans_default_options的选项的最后加上:-J-Dscala.home=d:\progra~1\scala ,【请仔细看好左边的字,路径是d:\progra~1\scala,而不是完整的d:\program files\scala,因为完整的路径有空格,所以导致路径每次都认为是/netbeans/files/scala】也没有找到类似资料。。。

7、重启netbeans,按下F6,输出:

XML/HTML代码
  1. init:  
  2. deps-jar:  
  3. Compiling 1 source file to D:\My Documents\NetBeansProjects\ScalaApplication1\build\classes  
  4. No changes to recompile  
  5. compile:  
  6. run:  
  7. Hello, world!  
  8. BUILD SUCCESSFUL (total time: 6 seconds)  

OK,至此一切正常。
最后我是参考:http://pierre8r.blogspot.com/2009/09/installing-scala-plugin-for-netbeans-on.html,失败。。。全局路径好象没啥用。
也看过:http://www.cnscala.com/viewthread.php?tid=49&highlight=netbeans,还是没用。。。后来我干脆是根据出错信息自己改了改(其实就是那个Dscala.home的路径,原来一直是采用完整路径所以一直失败。)

 

Tags: netbeans, jdk, scala

Android 手机上的 Scala 编程

说实话,我在听到别人介绍scala可以直接采用java的类库时,还在犹豫,但在看到这篇文章之后,心里安定很多。才下决心要学scala的。

原文很长,来自http://www.oschina.net/bbs/thread/7572

在本文中,我们将创建一个在 Android 设备上运行的移动应用程序。您将需要安装 Android SDK;本文使用 V1.5 SDK。应用程序代码将用 Scala 编程语言编写。如果您从来没用过 Scala,那么没有关系,因为本文将解释 Scala 代码。但是,即使您不熟悉 Scala,建议您至少熟悉 Java 语言。本文使用 Scala V2.7.5 进行开发。对于 Android 和 Scala 都提供了很好的 Eclipse 插件。本文使用 Eclipse V3.4.2 和 Android Development Tools(ADT) V0.9.1 以及 Scala IDE 插件 V2.7.5。请参阅 参 考资料,获得所有这些工具。

设置

编写 Android 应用程序听起来像是一个复杂的命题。Android 应用程序在它们自己的虚拟机中运行:Dalvik 虚拟机。但是,Android 应用程序的构建路径是开放的。下面表明了我们将使用的基本策略。


图 1. Android 上 Scala 的构建路径
 
大小: 2.89 K
尺寸: 429 x 58
浏览: 2891 次
点击打开新窗口浏览全图

其思想是,我们首先将所有 Scala 代码编译成 Java 类文件。这是 Scala 编译器的工作,所以这方面没什么太复杂的事情。接下来,获取 Java 类文件,使用 Android dex 编译器将类文件编译成 Android 设备上的 Dalvik VM 使用的格式。这就是所谓的 dexing, 也是 Android 应用程序的常规编译路径。通常,要经历从 .java 文件到 .class 文件再到 .dex 文件的过程。在本文,惟一不同的是我们从 .scala 文件开始。最后,.dex 文件和其他应用程序资源被压缩成一个 APK 文件,该文件可安装到 Android 设备上。

那 么,如何让这一切发生?我们将使用 Eclipse 做大部分工作。但是,此外还有一个较复杂的步骤:要让代码运行,还需要来自标准 Scala 库中的代码。在典型的 Scala 安装中,这是 /lib/scala-library.jar 中一个单独的 JAR。但是,这个 JAR 包括一些不受 Android 支持的代码。有些代码需要稍作调整,有些代码则必须移除。scala-library.jar 的定制构建是运行得最好的,至少目前是这样。请参阅 参 考资料,了解这里使用的定制构建。我们将把这个 JAR 称作 Android 库 JAR。

有了这个 JAR,剩下的事情就很容易了。只需使用 Eclipse 的 ADT 插件创建一个 Android 项目。然后将一个 Scala 特性(nature)添加到项目中。用前面谈到的 Android 库替代标准的 Scala 库。最后,将输出目录添加到类路径中。现在,可以开始了。主 Scala 站点对此有更详细的描述(请参阅 参 考资料)。现在,我们有了基本的设置,接下来看看我们将使用 Scala 创建的 Android 应用程序。

UnitsConverter

现 在,我们知道如何利用 Scala 代码,将它转换成将在 Android 设备上运行的二进制格式,接下来可以使用 Scala 创建一个移动应用程序。我们将创建的应用程序是一个简单的单位转换应用程序。通过这个应用程序可以方便地在英制单位与公制单位之间来回转换。这是一个非常 简单的应用程序,但是我们将看到,即使是最简单的应用程序也可以从使用 Scala 中获益。我们首先看看 UnitsConverter 的布局元素。

创建布局

您 也许对编写手机上运行的 Scala 感到兴奋,但是并非所有的移动开发编程都应该用 Scala 或 Java 语言完成。Android SDK 提供了一种很好的方式,使用基于 XML 的布局系统将用户界面代码与应用程序逻辑分离。我们来看看本文中的应用程序的主要布局文件,如清单 1 所示。


清单 1. Converter 应用程序的主要布局

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"  
  4.     android:gravity="center_horizontal" android:padding="10px"  
  5.     >  
  6.     <TextView android:id="@+id/prompt_label" android:layout_width="wrap_content"  
  7.         android:layout_height="wrap_content"   
  8.         android:text="@string/prompt_metric"/>  
  9.     <EditText android:id="@+id/amount" android:layout_below="@id/prompt_label"  
  10.         android:layout_width="fill_parent"   
  11.         android:layout_height="wrap_content"/>  
  12.     <TextView android:id="@+id/uom_label"    
  13.         android:layout_below="@id/amount"  
  14.         android:layout_width="wrap_content"   
  15.         android:layout_height="wrap_content"  
  16.         android:text="@string/uom"/>  
  17.     <Spinner android:id="@+id/uom_value"  
  18.         android:layout_below="@id/uom_label"  
  19.         android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content"/>  
  21.     <Button android:id="@+id/convert_button"  
  22.         android:layout_below="@id/uom_value"  
  23.         android:layout_width="wrap_content"  
  24.         android:layout_height="wrap_content"  
  25.         android:text="@string/convert_button_label"/>  
  26.     <TextView android:id="@+id/result_value"  
  27.         android:layout_below="@id/convert_button"  
  28.         android:layout_width="fill_parent"  
  29.         android:layout_height="fill_parent"/>          
  30. </RelativeLayout>  

以上代码非常简洁地创建了该应用程序的主 UI。它的根节点是一个 RelativeLayout 容器元素。Android SDK 中有很多布局选项。RelativeLayout 指示运行时使用相对定位对不同的 UI 小部件进行布局。要使用相对定位,可添加可见元素 — 在这里是一个 TextView 元素。这是用于显示文本的一个简单的元素。它被赋予一个 ID prompt_label。 接下来的元素,即一个 EditText 元素(一个文本输入框)将用到它。这个元素有一个 layout_below 属性,它的值等于 prompt_label ID。换句话说,EditText 应该放在名为 prompt_label 的元素的下方。

布局代码剩下的部分非常简单。有一个带标签的文本输入框、一个带标签的微调器(一个组合框或下拉框)、一个按钮和一个用于输出的文本框。图 2 显示正在运行的应用程序的一个截图,其中标出了不同的元素。


图 2. Android lLayout — 分解图
 
大小: 52 K
尺寸: 238 x 376
浏览: 2709 次
点击打开新窗口浏览全图

那么,以上视图中看到的不同文本值来自哪里呢?注意,清单 1 中的一些元素有一个 text 属性。例如,prompt_label 元素有一个等于 @string/prompt_metric 的 text 属性。这表明它将使用 Android 应用程序中一个标准的资源文件:strings.xml 文件,如清单 2 所示。


清单 2. strings.xml 资源

 

现在可以看到,图 2 中所有的文本来自何处。微调器有一个下拉框,其中包含可用于度量的单位,那些单位在清单 2 中没有列出。相反,它们来自另一个文件 arrays.xml,如清单 3 所示。


清单 3. arrays.xml 资源

 

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <array name="english_units">  
  4.         <item>Fahrenheit</item>  
  5.         <item>Pounds</item>  
  6.         <item>Ounces</item>  
  7.         <item>Fluid Ounces</item>  
  8.         <item>Gallons</item>  
  9.         <item>Miles</item>  
  10.         <item>Inches</item>  
  11.     </array>  
  12.     <array name="metric_units">  
  13.         <item>Celsius</item>  
  14.         <item>Kilograms</item>  
  15.         <item>Grams</item>  
  16.         <item>Millileters</item>  
  17.         <item>Liters</item>  
  18.         <item>Kilometers</item>  
  19.         <item>Centimeters</item>  
  20.     </array>      
  21. </resources>  

现在,我们可以看到将用于微调器的那些值。那么,这些值如何出现在微调器中,应用程序如何在英制单位与公制单位之间切换?要回答这些问题,我们需要 看看应用程序代码本身。

 

Scala 应用程序代码

Converter 应用程序的代码非常简单 — 不管用什么语言编写。当然,用 Java 编写起来非常容易,但是用 Scala 编写也同样不复杂。首先我们看看前面见过的 UI 背后的代码。

视图背后的代码

解释创建 UI 的 Scala 代码的最简单方式是先看看代码,然后走查一遍。对于任何应用程序,都是在应用程序的 AndroidManifest.xml 文件中定义应用程序的默认活动。任何 UI 背后都有一个 Activity 类,默认的 Activity 定义当应用程序初次装载时执行的 Activity 类。对于像本文这样简单的应用程序,有一个 Converter 类,清单 4 中显示了它的源代码。


清单 4. Converter 活动类

 

SCALA代码
  1. class Converter extends Activity{  
  2.     import ConverterHelper._  
  3.     private[this] var amountValue:EditText = null  
  4.     private[this] var uom:Spinner= null  
  5.     private[this] var convertButton:Button = null  
  6.     private[this] var resultValue:TextView = null  
  7.       
  8.     override def onCreate(savedInstanceState:Bundle){  
  9.       super.onCreate(savedInstanceState)  
  10.       setContentView(R.layout.main)  
  11.       uom = findViewById(R.id.uom_value).asInstanceOf[Spinner]  
  12.       this.setUomChoice(ENGLISH)  
  13.       amountValue = findViewById(R.id.amount).asInstanceOf[EditText]  
  14.       convertButton = findViewById(R.id.convert_button).asInstanceOf[Button]  
  15.       resultValue = findViewById(R.id.result_value).asInstanceOf[TextView]  
  16.       convertButton.setOnClickListener( () => {  
  17.           val unit = uom.getSelectedItem.asInstanceOf[String]  
  18.           val amount = parseDouble(amountValue.getText.toString)  
  19.           val result = UnitsConverter.convert(Measurement(unit,amount))  
  20.           resultValue.setText(result)  
  21.       })  
  22.     }  
  23.     override def onCreateOptionsMenu(menu:Menu) = {  
  24.       super.onCreateOptionsMenu(menu)  
  25.       menu.add(NONE, 00, R.string.english_units)  
  26.       menu.add(NONE, 11, R.string.metric_units)  
  27.       true  
  28.     }  
  29.     override def onMenuItemSelected(featureId:Int, item:MenuItem) = {  
  30.       super.onMenuItemSelected(featureId, item)  
  31.       setUomChoice(if (item.getItemId == 1) METRIC else ENGLISH)  
  32.       true  
  33.     }  
  34.     private   
  35.     def setUomChoice(unitOfMeasure:UnitsSystem){  
  36.       if (uom == null){  
  37.         uom = findViewById(R.id.uom_value).asInstanceOf[Spinner]  
  38.       }  
  39.       val arrayId = unitOfMeasure match {  
  40.         case METRIC => R.array.metric_units  
  41.         case _ => R.array.english_units  
  42.       }  
  43.       val units = new ArrayAdapter[String](this, R.layout.spinner_view,   
  44.         getResources.getStringArray(arrayId))  
  45.       uom.setAdapter(units)        
  46.     }  
  47. }  

我们从这个类的顶部开始。它扩展 android.app.Activity。这是一 个 Java 类,但是从 Scala 中可以对 Java 类轻松地进行细分。接下来,它有一些实例变量。每个实例变量对应前面定义的一个 UI 元素。注意,每个实例变量还被限定为 private[this]。这演示了 Scala 中特有的一种访问控制级别,而 Java 语言中不存在这种访问控制。这些变量不仅是私有的,而且只属于 Converter 类的特定实例。这种级别的访问控制对于移动应用程序来说有些大材小用,但是如果您是一名 Scala 开发人员,可以放心地在 Android 应用程序上使用您熟悉的语法。

 

回到清单 4 中的代码,注意,我们覆盖了 onCreate 方法。这是 Activity 类中定义的方法,通常被定制的 Activity 覆盖。如果用 Java 语言编写该代码,那么应该添加一个 @Override 标注。在 Scala 中,override 是一个关键词,用于确保正确性。这样可以防止误拼方法名之类的常见错误。如果误拼了方法名,Scala 编译器将捕捉到方法名并返回一个错误。注意,在这个方法上,以及任何其他方法上,不需要声明返回类型。Scala 编译器可以轻松推断出该信息,所以不需要多此一举。

onCreate 中的大部分代码类似于 Java 语言编写的代码。但是有几点比较有趣。注意,我们使用 findViewById 方法(在 Activity 子类中定义)获得不同 UI 元素的句柄。这个方法不是类型安全的,需要进行类型转换(cast)。在 Scala 中,要进行类型转换,可使用参数化方法 asInstanceOf[T],其中 T 是要转换的类型。这种转换在功能上与 Java 语言中的转换一样。不过 Scala 有更好的语法。接下来,注意对 setUomChoice 的调用(稍后我们将详细谈到这个方法)。最后,注意上述代码获得一个在布局 XML 中创建的按钮的句柄,并添加一个单击事件处理程序。

如果用 Java 语言编写,那么必须传入 Android 接口 OnClickListener 的一个实现。这个接口只定义一个方法:onClick。实际上,您关心的只是那个方法,但是在 Java 语言中无法直接传入方法。而在 Scala 中则不同,在 Scala 中可以传入方法字面量(literal)或闭包。在这里,我们用语法 () => { ... } 表示闭包,其中方法的主体就是花括号中的内容。开始/结束括号表示一个不带参数的函数。但是,我将这个闭包传递到 Button 的一个实例上的 setOnClickListener 方法,Button 是 Android SDK 中定义的一个 Java 类。如何将 Scala 闭包传递到 Java API?我们来看看。

Android 上的函数式编程

为了理解如何让 Android API 使用函数字面量,看看 Converter 类定义的第一行。这是一条重要的语句。这是 Scala 的另一个很好的特性。您可以在代码的任何地方导入包、类等,它们的作用域限于导入它们的文件。在这里,我们导入 ConverterHelper 中的所有东西。清单 5 显示 ConverterHelper 代码。


清单 5. ConverterHelper

Java代码
  1. object ConverterHelper{  
  2.   import android.view.View.OnClickListener  
  3.   implicit def funcToClicker(f:View => Unit):OnClickListener =   
  4.     new OnClickListener(){ def onClick(v:View)=f.apply(v)}  
  5.   implicit def funcToClicker0(f:() => Unit):OnClickListener =   
  6.     new OnClickListener() { def onClick(v:View)=f.apply}  
  7. }  

这是一个 Scala 单例(singleton),因为它使用对象声明,而不是类声明。单例模式被直接内置在 Scala 中,可以替代 Java 语言中的静态方法或变量。在这里,这个单例存放一对函数:funcToClickerfuncToClicker0。 这两个函数以一个函数作为输入参数,并返回 OnClickListener 的一个实例,OnClickListener 是 Android SDK 中定义的一个接口。例如,funcToClicker 被定义为以一个函数 f 为参数。这个函数 f 的类型为带一个 View 类型(Android 中的另一个类)的输入参数的函数,并返回 Unit,它是 void 在 Scala 中的对等物。然后,它返回 OnClickListener 的一个实现,在这个实现中,该接口的 onClick 方法被实现为将输入函数 f 应用到 View 参数。另一个函数 funcToClick0 也做同样的事情,只是以一个不带输入参数的函数为参数。

 

这两个函数(funcToClickerfuncToClicker0) 都被定义为隐式函数(implicit)。这是 Scala 的一个方便的特性。它可以让编译器隐式地将一种类型转换成另一种类型。在这里,当编译器解析 Converter 类的 onCreate 方法时,它遇到一个 setOnClickListener 调用。这个方法需要一个 OnClickListener 实例。但是,编译器却发现一个函数。在报错并出现编译失败之前,编译器将检查是否存在隐式函数,允许将函数转换为 OnClickListener。 由于确实还有这样的函数,所以它执行转换,编译成功。现在,我们理解了如何使用 Android 中的闭包,接下来更仔细地看看应用程序逻辑 — 特别是,如何执行单位转换计算。

单位转换和计算

我们回到清单 4。传入 onClickListener 的函数收到用户输入的度量单位和值。然后,它创建一个 Measurement 实例,并将该实例传递到一个 UnitsConverter 对象。清单 6 显示相应的代码。


清单 6. MeasurementUnitsConverter

Java代码
  1. case class Measurement(uom:String, amount:Double)  
  2.   
  3. object UnitsConverter{  
  4.       // constants  
  5.     val lbToKg = 0.45359237D  
  6.       val ozToG = 28.3495231  
  7.       val fOzToMl = 29.5735296  
  8.       val galToL = 3.78541178  
  9.       val milesToKm = 1.609344  
  10.       val inchToCm = 2.54    
  11.      
  12.       def convert (measure:Measurement)= measure.uom match {  
  13.           case "Fahrenheit" => (5.0/9.0)*(measure.amount - 32.0) + " C"  
  14.             case "Pounds" => lbToKg*measure.amount + " kg"  
  15.             case "Ounces" => ozToG*measure.amount + " g"  
  16.             case "Fluid Ounces" => fOzToMl*measure.amount + " mL"  
  17.             case "Gallons" => galToL*measure.amount + " L"  
  18.             case "Miles" => milesToKm*measure.amount + " km"  
  19.             case "Inches" => inchToCm*measure.amount + " cm"  
  20.             case "Celsius" => (9.0/5.0*measure.amount + 32.0) + " F"  
  21.             case "Kilograms" => measure.amount/lbToKg + " lbs"  
  22.             case "Grams" => measure.amount/ozToG + " oz"  
  23.             case "Millileters" => measure.amount/fOzToMl + " fl. oz."  
  24.             case "Liters" => measure.amount/galToL + " gallons"  
  25.             case "Kilometers" => measure.amount/milesToKm + " miles"  
  26.             case "Centimeters" => measure.amount/inchToCm + " inches"  
  27.             case _ => ""  
  28.       }  
  29. }  

Measurement 是一个 case 类。这是 Scala 中的一个方便的特性。用 “case” 修饰一个类会导致这个类生成这样一个构造函数:这个构造函数需要类的属性,以及 equalshashCodetoString 的实现。它对于像 Measurement 这样的数据结构类非常适合。它还为定义的属性(在这里就是 uomamount)生成 getter 方法。也可以将那些属性定义为 vars(可变变量),然后也会生成 setter 方法。仅仅一行 Scala 代码可以做这么多事情!

 

接下来,UnitsConverter 也是一个单例模式,因为它是使用 object 关键词定义的。它只有一个 convert 方法。注意,convert 被定义为相当于一条单一语句 — 一条 match 语句。它是一个单一表达式,所以不需要额外的花括号。它使用 Scala 的模式匹配。这是函数式编程语言中常见的一个强大特性。它类似于 Java 语言和很多其他语言中的 switch 语句。但是,我们可以匹配字符串(实际上,还可以有比这高级得多的匹配)。如果字符串匹配,则执行适当的计算,并返回格式化的字符串,以供显示。最后,注 意与 _ 匹配的最后一个 case。Scala 中的很多地方使用下划线作为通配符。在这里,它表示匹配任何东西,这类似于 Java 语言中的 default 语句。

现在,我们理解了应用程序中的计算,最后来看看剩下的 UI 设置和菜单。

UI 初始化和菜单

回到清单 4。我们说过要看看 setUomChoice。这个方法被定义为带有一个 UnitsSystem 类型的参数。我们来看看如何定义这个类型。


清单 7. UnitsSystem

 

Java代码
  1. sealed case class UnitsSystem()  
  2. case object ENGLISH extends UnitsSystem  
  3. case object METRIC extends UnitsSystem  

我们看到,UnitsSystem 是一个密封的 case 类,没有属性。看上去它不是很有用。接下来,我们看看两个 case 对象。还记得吗,object 表示 Scala 中的一个单例。在这里,有两个 case 对象,每个 case 对象都扩展 UnitsSystem。这是 Scala 中的一个常见的特色,它可以提供更简单、更类型安全的枚举方式。

 

现在 setUomChoice 的实现更加合理。在获得微调器的一个句柄后,我们匹配传入的 UnitsSystem 的类型。这标识了我们在前面见到的 arrays.xml 中的一个数组。这是使用 Android SDK 生成的 R 类表示资源,例如 arrays.xml 文件。一旦知道使用哪个数组,我们就通过创建一个传入微调器的适配器(在这里是一个 ArrayAdapter), 使用那个数组作为微调器的数据源。

最后,看看清单 4 中的 onCreateOptionsMenuonMenuItemSelected 方法。这些方法是在 Activity 中定义的,我们将在 Converter 活动中覆盖这些方法。第一个方法创建一个菜单。第二个方法处理用户从菜单中选择 English 或 metric 的事件。它再次调用 setUomChoice。 这使用户可以在从英制单位转换为公制单位与从公制单位转换为英制单位之间进行切换。

结束语

Android 平台的架构使它可以用于在 Java 虚拟机上运行的任何编程语言。我们看到了如何设置 Android 项目,使它使用 Scala 代码。这个过程也可以延伸到其他 JVM 编程语言,例如 Groovy、JRuby 或 Fan。当可以任意使用 Scala 编程语言时,编写 Android 应用程序将变得更轻松。您仍可以使用 Eclipse 进行开发。仍然可以在 Eclipse 中用模拟器和设备进行调试。您可以继续使用所有的工具,同时又得到一种生产率更高的编程语言。

例程下载:os-eclipse-scala-converter[1].zip

Tags: android, scala, eclipse, netbeans

scala是什么

前两天一直在说scala,有几个朋友问我什么 是Scala,每次让他们翻一下google也太累了,所以我就贴在博客上,当然这也是找出来的东西,我没有能力写这么多。

我个人还是认为,不管怎么样,WEB、winform、console(shell)三种编程效果的程序语言最好都要熟悉一种,不管是为了将来的职业发展还是工作应用,都会有很大的方便。
OK,开始介绍:

Scala是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了面向对象和函数语言的特性。

  • Scala是面向对象的:Scala是一个纯面向对象语言,在某种意义上来讲所有数值都是对象。对象的类型和 行为是由class和trait来描述的。Class的抽象可由子类化和一种灵活的基于mixin的组合机制(它可作为多重继承的简单替代方案)来扩展。
  • Scala是函数式的: Scala还是一个函数式语言,在某种意义上来讲所有函数都是数值。Scala为定义匿名函数提供了一种轻量级的语法,它支持高阶(higher- order)函数、允许函数嵌套、支持局部套用(currying)。Scala的case类及其内置支持的模式匹配模型代数类型在许多函数式编程语言中 都被使用。
  • Scala是静态类型的:Scala配备了一套富有表现力的类型系统,该抽象概念以一种安全的和一致的方式被 使用。
  • Scala是可扩展的:Scala的设计承认了实践事实,领域特定应用开发通常需要领域特定语言扩展。 Scala提供了一个独特的语言组合机制,这可以更加容易地以类库的形式增加新的语言结构:
    • 任何方式可以被用作中缀(infix)或后缀(postfix)操作符
    • 闭包按照所期望的类型(目标类型)自动地被构造
    两者结合使用可方便地定义新语句,无需扩展语法,也无需使用类似宏的元编程工具。
  • Scala可与Java和.NET进行互操作:Scala 设计时就考虑了与流行编程环境良好交互,如Java 2运行时环境(JRE)和 .NET框架(CLR)。特别是与主流面向对象语言,如Java和C#尽量无缝交互。Scala有像Java和C#一样的编译模型(独立编译,动态装载 类),允许访问成千上万的高质量类库。

来源:http://www.oschina.net/p/scala

Tags: scala, java

netbeans更换jdk路径

昨天下载完了jdk1.6update20后,总以为启动netbeans的时候会自动更換jdk路径的。(原来我是想他是直接从系统路径里读取的。)但是在安装scala插件的时候,它还是提示我用的是jre而不是jdk。但是给了我一个帮助,地址为:http://wiki.netbeans.org/FaqRunningOnJre

OK,原来这么简单

1、先安装JDK full版

2、打开<netbeans安装目录>/etc/netbeans.conf,更換里面的netbeans的JDK的路径。。

3、保存,重启netbeans,Over了

第二种方式就是 --jdkhome command-line option e.g. ./bin/netbeans --jdkhome /usr/local/share/java/jdk1.6.0_07/

这是在快捷方式中指定jdkhome,这样比较适合你有很多JDK版本时适用。

 

Tags: netbeans, jdk, java, scala

JDK最新版本下载及JDK安装与配置

前文就说了,我最近在学scala,于是乎,我用日常我常用的IDE开始装scala插件,结果它告诉我需要安装jdk,一下子有点郁闷,原来,我安装系统时,为了装netbeans,都是装的JRE,因为我仅用来开发PHP。可是现在要JDK了,找不到地方下载呀。虽然我知道,它就在sun.com,但一下子急着找却找不到。

网上连这个都有现成的资料,而且会教你一步一步的配置这东西,这让我想起我在01年左右配置java环境的事情,想不到一下子过去10年了。10年之前我觉得java很复杂,那时候选择了学asp,和PHP,现在,又要走回去了。不过我还是坚持了一下下,没有用java,而的是scala,其实。。。他们两个很相象啊。

“工欲善其事,必先利其器”。进行程序开发,首先要安装开发相关的软件,并且熟悉这些工具软件的基本使用。本章介绍一下两类开发工具的使用,重点是 JDK最新版本以及JDK下载、安装和配置。

基础开发工具

基础开发工具是进行程序设计的基础,包含开发中需要的一些基本功能,例如编译、运行等,是其它开发工具的基础。Java语言的基本开发工具是SUN 公司免费提供的JDK。

实际开发中,为了方便和程序开发的效率,一般不直接使用基础开发工具,所以对于很多基础开发工具,只需要掌握其基本的使用即可。

集成开发环境(IDE)

集成开发环境是指将程序设计需要的很多功能,例如代码编辑、代码调试、程序部署等等一系列功能都整合到一个程序内部,方便程序开发,并提高实际的开 发效率,简化了程序设计中的很多操作。

Java语言的集成开发环境很多,常见的有Eclipse、JBuilder、NetBeans等等。由于实际开发中,基本都是使用集成开发环境进 行开发,所以在学习中必须熟练掌握该类工具的使用。一般集成开发环境的使用都很类似,在学习时只要熟练掌握了其中一个的使用,其它的工具学习起来也很简 单。

本文以Eclipse为例来介绍集成开发环境的基本使用。

JDK开发环境

JDK(Java Developer’s Kit),Java开发者工具包,也称J2SDK(Java 2 Software Development Kit),是SUN公司提供的基础Java语言开发工具,该工具软件包含Java语言的编译工具、运行工具以及执行程序的环境(即JRE)。

JDK现在是一个开源、免费的工具。JDK是其它Java开发工具的基础,也就是说,在安装其它开发工具以前,必须首先安装JDK。
对于初 学者来说,使用该开发工具进行学习,可以在学习的初期把精力放在Java语言语法的学习上,体会更多底层的知识,对于以后的程序开发很有帮助。

但是JDK未提供Java源代码的编写环境,这个是SUN提供的很多基础开发工具的通病,所以实际的代码编写还需要在其它的文本编辑器中进行。其实 大部分程序设计语言的源代码都是一个文本文件,只是存储成了不同的后缀名罢了。常见的适合Java的文本编辑器有很多,例如JCreator、 Editplus、UltraEdit等。

下面依次来介绍JDK的下载、安装、配置和使用。

1 JDK的下载

如果需要获得JDK最新版本,可以到SUN公司的官方网站上进行下载,下载地址为:
http://java.sun.com/javase/downloads/index.jsp
下 载最新版本的“JDK 6 Update 6”,选择对应的操作系统,以及使用的语言即可。

在下载Windows版本时,有两个版本可供下载,,分别是:

Windows Online Installation:在线安装版本,每次安装时都从网络上下载安装程序,在下载完成以后,进行实际的安装。

Windows Offline Installation:离线安装版本,每次安装时直接进行本地安装。通常情况下,一般下载离线安装版本。

其实如果不需要安装JDK最新版本的话,也可以在国内主流的下载站点下载JDK的安装程序,只是这些程序的版本可能稍微老一些,这些对于初学者来说 其实问题不大。

2 JDK的安装

Windows操作系统上的JDK安装程序是一个exe可执行程序,直接安装即可,在安装过程中可以选择安装路径以及安装的组件等,如果没有特殊要 求,选择默认设置即可。程序默认的安装路径在C:\Program Files\Java目录下。

3 JDK的配置

JDK安装完成以后,可以不用设置就进行使用,但是为了使用方便,一般需要进行简单的配置。由于JDK提供的编译和运行工具都是基于命令行的,所以 需要进行一下DOS下面的一个设定,把JDK安装目录下bin目录中的可执行文件都添加到DOS的外部命令中,这样就可以在任意路径下直接使用bin目录 下的exe程序了。

配置的参数为操作系统中的path环境变量,该变量的用途是系统查找可执行程序所在的路径。

配置步骤为:

1、“开始”>“设置”>“控制面板”>“系统”

如果控制面板的设置不是经典方式,那么可以在控制面板的“性能和维护”中找到“系统”。当然,也可以选择桌面上的“我的电脑”,点击鼠标右键,选择 “属性”打开。

2、在“系统属性”窗口中,选择“高级”属性页中的“环境变量”按钮。

3、在“环境变量”窗口中,选择“系统变量”中变量名为“Path”的环境变量,双击该变量。

4、把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。例如JDK的安装路径下的bin 路径是C:\Program Files\Java\jdk1.6.0_04\bin,则把该路径添加到Path值的起始位置,则值为:C:\Program Files\Java\jdk1.6.0_04\bin;C:\Program Files\PC Connectivity Solution\;C:\Program Files\Java\jdk1.6.0_04\bin;C:\j2sdk1.4.2_11\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
以 上路径在不同的计算机中可能不同。

配置完成以后,可以使用如下格式来测试配置是否成功:
1、 打开“开始”>“程序”>“附件”>“命令提示符”
2、 在“命令提示符”窗口中,输入javac,按回车执行

如果输出的内容是使用说明,则说明配置成功。如果输出的内容是“’javac’不是内部或外部命令,也不是可执行的程序或批处理文件。”,则说明配 置错误,需要重新进行配置。

常见的配置错误为:

1)JDK的安装和配置路径错误,路径应该类似C:\Program Files\Java\jdk1.6.0_04\bin。

2)分隔的分号错误,例如错误的打成冒号或使用全角的分号

--EOF--http://developer.51cto.com/art/200907/134559.htm

Tags: java, jre, jdk, scala, netbeans

Records:12123