クラスをつくってみる。
なんかよくやったよねーこれみたいなPersonクラス。
実行クラス。
Personクラスのコンストラクタで値いれてるnameって変数、定義してないけどスコープってどうなんだ?って思ったので直接参照してみてる。
結果は↓
別パッケージのクラスから直接参照できてるのでpublic扱いってことかな。。
そもそもこの概念が通用するのか。
そして。。。ScalaなクラスはJavaから直接呼べると聞いて。
結果。
すげー(ノ´▽`)ノ
なんか完全に同居できそうな感じ。
あとScalaではPersonなクラスの変数宣言時に型は明示しなくてよい。
てかPerson#helloの書き方からしてなんかJSっぽい。
けど違うのは型推論がはいってるので、型が違うときはちゃんとコンパイルエラーにしてくれるってさ。
賢い。
ちなみにScalaを呼び出すJavaを実行するときはjavaコマンドではなくscalaコマンドで実行しる!とのこと。IDEつかってたら関係ないが。
そう。scalaコマンドは結局javaコマンドを呼び出してるだけらしい。
・・・まじっすか。
ってことでscalaコマンドの実行ファイルの中身を見てみる。
ほんとやーー( ̄□ ̄;)
なんかよくやったよねーこれみたいなPersonクラス。
package person
class Person(val name : String){
def hello = println("my name is " + name)
}
実行クラス。
package programmer
import person.Person
object ScalaPersons{
def main(args : Array[String]){
val person = new Person("マイコーりょう")
person.hello
println("直接きいてみると"+person.name)
}
}
Personクラスのコンストラクタで値いれてるnameって変数、定義してないけどスコープってどうなんだ?って思ったので直接参照してみてる。
結果は↓
my name is マイコーりょう
直接きいてみるとマイコーりょう
別パッケージのクラスから直接参照できてるのでpublic扱いってことかな。。
そもそもこの概念が通用するのか。
そして。。。ScalaなクラスはJavaから直接呼べると聞いて。
package programmer;
import person.Person;
public class JavaPersons {
public static void main(String[] args){
Person person = new Person("えがしら");
person.hello();
}
}
結果。
my name is えがしら
すげー(ノ´▽`)ノ
なんか完全に同居できそうな感じ。
あとScalaではPersonなクラスの変数宣言時に型は明示しなくてよい。
てかPerson#helloの書き方からしてなんかJSっぽい。
けど違うのは型推論がはいってるので、型が違うときはちゃんとコンパイルエラーにしてくれるってさ。
賢い。
ちなみにScalaを呼び出すJavaを実行するときはjavaコマンドではなくscalaコマンドで実行しる!とのこと。IDEつかってたら関係ないが。
そう。scalaコマンドは結局javaコマンドを呼び出してるだけらしい。
・・・まじっすか。
ってことでscalaコマンドの実行ファイルの中身を見てみる。
#!/bin/sh
##############################################################################
# Copyright 2002-2009, LAMP/EPFL
#
# This is free software; see the distribution for copying conditions.
# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
##############################################################################
cygwin=false;
case "`uname`" in
CYGWIN*) cygwin=true ;;
esac
# Finding the root folder for this Scala distribution
SOURCE=$0;
SCRIPT=`basename "$SOURCE"`;
while [ -h "$SOURCE" ]; do
SCRIPT=`basename "$SOURCE"`;
LOOKUP=`ls -ld "$SOURCE"`;
TARGET=`expr "$LOOKUP" : '.*-> \(.*\)$'`;
if expr "${TARGET:-.}/" : '/.*/$' > /dev/null; then
SOURCE=${TARGET:-.};
else
SOURCE=`dirname "$SOURCE"`/${TARGET:-.};
fi;
done;
SCALA_HOME=`dirname "$SOURCE"`/..;
SCALA_HOME=`cd "$SCALA_HOME"; pwd`;
# Remove spaces from SCALA_HOME on windows
if $cygwin; then
SCALA_HOME=`cygpath --windows --short-name "$SCALA_HOME"`
SCALA_HOME=`cygpath --unix "$SCALA_HOME"`
fi
# Constructing the extension classpath
TOOL_CLASSPATH=""
if [ -z "$TOOL_CLASSPATH" ] ; then
for ext in `ls -d "$SCALA_HOME"/lib/*` ; do
if [ -z "$TOOL_CLASSPATH" ] ; then
TOOL_CLASSPATH="$ext"
else
TOOL_CLASSPATH="$TOOL_CLASSPATH:$ext"
fi
done
fi
if $cygwin; then
if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
format=mixed
else
format=windows
fi
SCALA_HOME=`cygpath --$format "$SCALA_HOME"`
TOOL_CLASSPATH=`cygpath --path --$format "$TOOL_CLASSPATH"`
fi
# Reminder: substitution ${JAVA_OPTS:=-Xmx256M -Xms16M} DO NOT work on Solaris
[ -n "$JAVA_OPTS" ] || JAVA_OPTS="-Xmx256M -Xms32M"
if [ -z "$JAVACMD" -a -n "$JAVA_HOME" -a -x "$JAVA_HOME/bin/java" ]; then
JAVACMD="$JAVA_HOME/bin/java"
fi
exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.classpath="$CLASSPATH" -Denv.emacs="$EMACS" scala.tools.nsc.MainGenericRunner "$@"
ほんとやーー( ̄□ ̄;)