プログラミング言語 Scala 7冊目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/09/04(日) 20:07:34.70ttp://www.scala-lang.org/
■リンク集
ttp://sites.google.com/site/scalatohoku/%E5%8B%89%E5%BC%B7%E4%BC%9A%E8%B3%87%E6%96%99
■前スレ
プログラミング言語 Scala 6冊目
ttp://hibari.2ch.net/test/read.cgi/tech/1307416864/
■Scalaの紹介文(さわり)
Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25
■Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Proの連載記事、各々で開かれた勉強会の資料などがあります。
0002デフォルトの名無しさん
2011/09/04(日) 21:10:02.11乙なんだぜ!
「ERROR:Lvが足りなくてスレッド立て(ら)れません。」
とか言われてスレ立てられなかったんだぜ…。日に日に使いにくくなる2ch。
しかしこれ、"ERROR"が全角で"Lv"が半角という統一感の無さで憤死しそうになるな…。
あと次スレからリンクにはこれも追加しようぜ
プログラミング言語Scala 日本語情報サイト
http://sites.google.com/site/scalajp/
0003デフォルトの名無しさん
2011/09/04(日) 21:25:15.300004デフォルトの名無しさん
2011/09/04(日) 21:32:59.140005デフォルトの名無しさん
2011/09/04(日) 22:14:45.740006デフォルトの名無しさん
2011/09/04(日) 22:33:14.540007デフォルトの名無しさん
2011/09/04(日) 22:36:41.321000スレッド落ちシステムの特徴だとは思う
0008デフォルトの名無しさん
2011/09/05(月) 00:46:15.08この定義はおかしいって騒ぐだけだろ?
0009デフォルトの名無しさん
2011/09/05(月) 01:31:26.76前方互換性の考慮の結果だよ
0010デフォルトの名無しさん
2011/09/05(月) 21:30:15.120011デフォルトの名無しさん
2011/09/05(月) 21:35:57.010012デフォルトの名無しさん
2011/09/05(月) 21:54:14.000013デフォルトの名無しさん
2011/09/05(月) 22:46:55.09JavaとかRubyのモヒカンのガチのキモさに触れたら、Scalaなんぞ平和そのもの。
0014デフォルトの名無しさん
2011/09/05(月) 23:14:26.13ていうかScalaやってる人って、何作ってるの?
Webから情報収集するプログラム書きたいのだが、他言語に比べて情報が少なすぎる、、。
0015デフォルトの名無しさん
2011/09/05(月) 23:29:11.96そのくらいならまずJavaで作ってみて、書き換えていけばいいのでは?
0016デフォルトの名無しさん
2011/09/06(火) 00:05:47.550017デフォルトの名無しさん
2011/09/06(火) 00:12:23.510018デフォルトの名無しさん
2011/09/06(火) 00:31:48.060019デフォルトの名無しさん
2011/09/06(火) 00:36:02.42URL url = Thread.currentThread().getContextClassLoader().getResource("log4j.properties")
という箇所で、urlにnullが格納されてしまうのですが、どなたか回避をご存知でしょうか?
(当然ながら、log4j.propertiesはクラスパス上においています。)
普通にコンパイルして実行すると、urlにはlog4j.propertiesのパスがちゃんと入るのですが…。
0020デフォルトの名無しさん
2011/09/06(火) 03:27:55.430021デフォルトの名無しさん
2011/09/06(火) 03:35:12.89Thread.currentThread().getContextClassLoader()
で取得されるクラスローダが別物なので。
> val url = getClass().getClassLoader().getResource("log4j.properties")
とやるとちゃんと取得できます。
総大将になったつもりは無かったんですけど、モヒカン過ぎると色々摩擦を生む事自体は理解してます。
あまりモヒカン的になりすぎないようにしようとは思っているのですけど、人間、すぐには変われないですね…。
0023デフォルトの名無しさん
2011/09/06(火) 06:39:24.860024デフォルトの名無しさん
2011/09/06(火) 07:44:28.630025デフォルトの名無しさん
2011/09/06(火) 09:38:56.36限界集落のOCaml村に煽られてもスルーできるが、
同じJVM言語仲間のGroovy村に煽られたら戦争だろうが……!
って感じですかね?
0026デフォルトの名無しさん
2011/09/06(火) 17:43:27.37情報が少ないならここで聞けばいいじゃん
0027デフォルトの名無しさん
2011/09/06(火) 20:03:24.84馴れ合う必要なんてないね
0028デフォルトの名無しさん
2011/09/06(火) 20:05:32.01そういう怖い人はScala使わないでください><
0029デフォルトの名無しさん
2011/09/06(火) 20:13:05.510030デフォルトの名無しさん
2011/09/06(火) 20:38:53.53http://journal.mycom.co.jp/articles/2011/09/05/efl2/index.html
0031デフォルトの名無しさん
2011/09/06(火) 20:47:44.01キモいもん貼るなボケ
0032デフォルトの名無しさん
2011/09/06(火) 22:29:36.75> scalac a.scala -cp path/*.jar
error: IO error while decoding ... with UTF-8
Please try specifying another one using the -encoding option
で数時間ハマりました。
正解は
> scalac a.scala -cp "path/*:."
だそうです。("path/*.jar:."もダメらしい)
エンコーディングとか関係ねーじゃん!
003332
2011/09/06(火) 22:32:55.34誰か簡単に解説してちょ。
0034デフォルトの名無しさん
2011/09/06(火) 22:39:38.71はてな村用語。
http://mohican.g.hatena.ne.jp/keyword/%E3%83%A2%E3%83%92%E3%82%AB%E3%83%B3%E6%97%8F
「対立した文化として→ムラ社会」なんて書いてあるけど、
モヒカンが集まってムラ社会形成してるよな。
0036デフォルトの名無しさん
2011/09/06(火) 23:20:52.380037デフォルトの名無しさん
2011/09/07(水) 13:32:17.20どうやって書くんだっけ?
0038デフォルトの名無しさん
2011/09/07(水) 19:59:16.620039デフォルトの名無しさん
2011/09/07(水) 23:21:37.73お前モヒカン村で何聞いてるの?
0040デフォルトの名無しさん
2011/09/07(水) 23:42:34.16ソースとテストケース出さずにそんな事言われても…
0041デフォルトの名無しさん
2011/09/08(木) 04:12:17.130042デフォルトの名無しさん
2011/09/08(木) 05:10:10.64長いから要約して
0043デフォルトの名無しさん
2011/09/08(木) 08:01:09.88Scalaの標準のアクター実装のせいで、負荷をかけるとOut of Memoryで落ちた
Clojureで書き直してみたら負荷かけても動くようになった
さらにコードも短くなった(行数:1,000行から260行、文字数:31kから11.5k)
0044デフォルトの名無しさん
2011/09/08(木) 08:55:01.95動的型言語では簡単に出来るけど、Scalaでは出来ません。
0045デフォルトの名無しさん
2011/09/08(木) 16:42:36.92イベント処理でrepaintを呼ぶと以前描画したものが消えてしまうのの回避方法ってある?
例えで言うと、マウスでクリックした所に円を描くプログラムに関して、
新たにクリックすると直前に描いた円が消えてしまう感じ。
ここで聞くなって話なら申し訳ない。
0046デフォルトの名無しさん
2011/09/08(木) 17:30:41.95描いた円を全て覚えておくか、メモリ上にビットマップ展開して、そこに円を描画。
paint(repaint含む)はメモリ上のビットマップを画面に描画するだけ
Java/scalaに限らず、GUI全般の問題やね
0047デフォルトの名無しさん
2011/09/08(木) 17:57:18.52ありがとう。GUIプログラミングについてもっと勉強し直す。
スレチに近くてスマソ。
0048デフォルトの名無しさん
2011/09/08(木) 17:57:46.91カッコだらけの時代遅れ糞言語なんて誰も使わねえよ、ばーかばーか
っていうのを翻訳して投稿しておいてくれ
0049デフォルトの名無しさん
2011/09/08(木) 23:58:46.23動的言語にできるという意味でなら、scalaでもできる
以上
0050デフォルトの名無しさん
2011/09/09(金) 07:31:09.91こんなことがしたいのでは?
Python
def newType(T):
class Foo(T):
pass
return Foo
C++
template <class T>
class Foo : public T {
};
0051デフォルトの名無しさん
2011/09/09(金) 10:52:05.680052デフォルトの名無しさん
2011/09/09(金) 18:00:05.89不細工を角度で誤魔化そうとするスイーツ臭はどこにいった
0053デフォルトの名無しさん
2011/09/09(金) 18:01:59.540054デフォルトの名無しさん
2011/09/09(金) 18:05:16.48def newType[T:ClassManifest]() : ClassManifest[Foo[T]] = {
class Foo[T] extends T {}
return implicitly[ClassManifest[Foo[T]]]
}
def construct[T](t:ClassManifest[T]) : T =
{
return t.erasure.newInstance().asInstanceOf[T]
}
val t = newType[Bar]()
val x = construct(t)
こっちはPython版
http://ideone.com/lNfZi
0055デフォルトの名無しさん
2011/09/10(土) 08:17:53.06馬鹿過ぎワロタwww
0056デフォルトの名無しさん
2011/09/10(土) 08:34:26.27相手にするだけ無駄
0057デフォルトの名無しさん
2011/09/10(土) 11:28:47.84隔離スレとして機能してたのに
0058デフォルトの名無しさん
2011/09/10(土) 11:39:05.96Pythonより劣る
F#のような洗練された言語設計もない
どうやってつかえばいいの?
0059デフォルトの名無しさん
2011/09/10(土) 11:52:17.030060デフォルトの名無しさん
2011/09/10(土) 16:01:01.60実体化したらそれで終わりなんて継承ツリーの中で使いにくい
自分と同じ型のメンバーを表すだけでも大変
抽象型を使ってみたが妙に不自然な書き方しか思いつかない
abstract class Base {
type TParent <: Base
var parent: Option[TParent] = None
}
class とり extends Base {
override type TParent <: とり
override def toString = "とり"
}
class とんび extends とり {
override type TParent <: とんび
override def toString = "とんび"
}
object AbstractTypeTest {
def main(args: Array[String]) = {
var とり = new とり { type TParent = とり }
とり.parent = Option(new とり { type TParent = とり })
println(とり.parent)
var とんび = new とんび { type TParent = とんび }
とんび.parent = Option(new とんび { type TParent = とんび })
println(とんび.parent)
}
}
0061デフォルトの名無しさん
2011/09/10(土) 20:37:55.020062デフォルトの名無しさん
2011/09/10(土) 21:42:59.38「使うプログラミング言語により思考は制限される」
http://www.slideshare.net/yukihiro_matz/ruby-9183142
http://itpro.nikkeibp.co.jp/article/NEWS/20110909/368352/
つまり、静的厨の発想は制限されてるから
動的言語でしか出来ない事は思い浮かばないw
0063デフォルトの名無しさん
2011/09/10(土) 21:47:24.370064デフォルトの名無しさん
2011/09/10(土) 22:00:13.97静的言語でしかできないこともあるから
両方やれば一番いいんだよな
0065デフォルトの名無しさん
2011/09/10(土) 22:36:27.470066デフォルトの名無しさん
2011/09/10(土) 22:41:08.860067デフォルトの名無しさん
2011/09/10(土) 23:42:54.39いない言語なんてつかっちゃダメだよなぁ
0068デフォルトの名無しさん
2011/09/10(土) 23:56:58.900069デフォルトの名無しさん
2011/09/10(土) 23:59:57.79モヒカン言語らしくしろよ
0070デフォルトの名無しさん
2011/09/11(日) 00:13:01.010071デフォルトの名無しさん
2011/09/11(日) 00:22:03.380072デフォルトの名無しさん
2011/09/11(日) 04:05:52.98と考えれば、静的型付けの方がリッチだな。
いらないときは静的型チェックをはずせばいいだけ。
0073デフォルトの名無しさん
2011/09/11(日) 05:30:03.220074デフォルトの名無しさん
2011/09/11(日) 06:31:09.57確かコンパイラ系を作ってる人の文章で、Javaと別のtoolに戻ったとか言ってました。
どんなtoolか知りたいので、もう一度その記事を教えて下さい。
0075デフォルトの名無しさん
2011/09/11(日) 08:30:31.50じゃあ、Dumpクラスを継承したクラスの全ての公開メソッドに
引数と戻り値を出力する処理を追加するようなDumpクラスを
Scalaで書いてみてよ
動的言語なら10行くらいで書けるから
0076デフォルトの名無しさん
2011/09/11(日) 10:44:24.56っ AspectJ
0077デフォルトの名無しさん
2011/09/11(日) 10:57:45.990078デフォルトの名無しさん
2011/09/11(日) 11:02:13.76そんな君にはdynamic proxy。
0079デフォルトの名無しさん
2011/09/11(日) 11:47:01.830080デフォルトの名無しさん
2011/09/11(日) 11:59:30.260081デフォルトの名無しさん
2011/09/11(日) 12:01:40.91コードは書けないが口だけは一人前
0082デフォルトの名無しさん
2011/09/11(日) 12:08:27.00で、それが実用においてどういうデメリットがあるの? って聞いてるんだけど。
0083デフォルトの名無しさん
2011/09/11(日) 13:03:24.060084デフォルトの名無しさん
2011/09/11(日) 13:23:30.71暗黙的変換を使って少しましな書き方ができた
でも素直じゃない
class HasParent[TParent <: Base](any: TParent) {
def parent = any.parent
def parent_=(p: TParent) = any.parent = p
}
abstract class Base {
var parent: Base = _
}
class とり extends Base {
override def toString = "とり"
}
class とんび extends とり {
override def toString = "とんび"
}
object AbstractTypeTest {
implicit def toHasParent[T <: Base](any: T): HasParent[T] = new HasParent[T](any)
def main(args: Array[String]) = {
var とり = new とり
とり.parent = new とり
println(とり.parent)
var とんび = new とんび
とんび.parent = new とんび
println(とんび.parent)
}
}
0085デフォルトの名無しさん
2011/09/11(日) 14:05:16.68自分の思い通りにならないとモヒカンのせいにするのはよくないな。
0086デフォルトの名無しさん
2011/09/11(日) 14:09:56.28スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
巣から落ちた鳥は?
カラス!
0087デフォルトの名無しさん
2011/09/11(日) 14:26:26.20型引数「を」スーパークラスから継承したい場合は、まさに抽象型使えってのがScala流かと思います。あと、
ジェネリックで型引数を継承できるようにしたとして、ややこしくなるだけな気がします。型引数はメンバ
じゃないので、本来継承できるべきものじゃないですし。
あと、ここで「とび」や「とんび」クラスをさらに継承する必要が無いなら、
override type TParent <: とび
じゃなくて、
override type TParent = とび
にしてしまった方がいいのではないかと。そうすれば、new とび { type TParent = とび } じゃなくて、単にnew とび
と書けますし。
0089デフォルトの名無しさん
2011/09/11(日) 14:38:16.650090デフォルトの名無しさん
2011/09/11(日) 14:38:37.600091デフォルトの名無しさん
2011/09/11(日) 15:41:54.64009260,88
2011/09/11(日) 17:01:16.07ありがとうございます
override type TParent = とび
継承する必要がないのならこの方がよいのはわかります
それだと継承の可能性を閉じてしまいますのであえてあの書き方にしました
009360,88
2011/09/11(日) 17:04:08.90こんな書き方が許されたらと思いました
abstract class Base {
type TParent <: Base
var parent: Option[TParent] = None
}
class とり extends Base {
override type TParent = とり //ここで指定しても派生クラスで継承できる
override def toString = "とり"
}
class とんび extends とり {
override type TParent = とんび //ここで指定しても派生クラスで継承できる
override def toString = "とんび"
}
object AbstractTypeTest {
def main(args: Array[String]) = {
var とり = new とり
とり.parent = Option(new とり)
println(とり.parent)
var とんび = new とんび
とんび.parent = Option(new とんび)
println(とんび.parent)
}
}
009460,84
2011/09/11(日) 17:18:37.670095デフォルトの名無しさん
2011/09/11(日) 20:14:05.280096uy
2011/09/11(日) 21:49:39.13ゴミだから間違えるんだよな
お前みたいな奴はプログラムで変なミスするよ
むいてない 死んだほうがいい しんだほうが いい
0097デフォルトの名無しさん
2011/09/11(日) 22:10:44.72welcome to http://hibari.2ch.net/test/read.cgi/tech/1312201995/
0098デフォルトの名無しさん
2011/09/11(日) 23:51:17.550099デフォルトの名無しさん
2011/09/12(月) 02:34:06.66↑糞言語の開発者 メガネ、ハゲ、ヒゲなどが特徴
http://lamp.epfl.ch/~odersky/images/Martin.JPG
↑神言語の開発者 なんというナイスガイ!
0100デフォルトの名無しさん
2011/09/12(月) 07:02:18.990101デフォルトの名無しさん
2011/09/12(月) 08:12:06.06■ このスレッドは過去ログ倉庫に格納されています