最近Scalaにチャレンジしていますが、イテレータの動きがよくわかりません。
Scala Documentation(リンク)にはtake(n) でイテレータがn要素先に進む、という記述があるのですが、ArrayBufferのイテレータはそうなっていません。たぶん。
下記のコードを使って確かめました。7要素持っているバッファから、2要素、3要素、4要素、とtake(n) していくコードです。val it4 = take(4) は4要素取ろうとしますが、要素が足りず2要素しか取れないことを期待しています。
val a = scala.collection.mutable.XXXXXX(0, 1, 2, 3, 4, 5, 6)
val it = a.iterator
val it2 = it.take(2)
val it3 = it.take(3)
val it4 = it.take(4) //実際には2要素しか取れないはず
it2.toList
it3.toList
it4.toList
it.toList
まずはXXXXXXの部分をListBufferにします。結果は期待通りです。
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.7.0_25). Type in expressions to have them evaluated. Type :help for more information. scala> val a = scala.collection.mutable.ListBuffer(0, 1, 2, 3, 4, 5, 6) a: scala.collection.mutable.ListBuffer[Int] = ListBuffer(0, 1, 2, 3, 4, 5, 6) scala> val it = a.iterator it: Iterator[Int] = non-empty iterator scala> val it2 = it.take(2) it2: Iterator[Int] = non-empty iterator scala> val it3 = it.take(3) it3: Iterator[Int] = non-empty iterator scala> val it4 = it.take(4) it4: Iterator[Int] = non-empty iterator scala> it2.toList res0: List[Int] = List(0, 1) scala> it3.toList res1: List[Int] = List(2, 3, 4) scala> it4.toList res2: List[Int] = List(5, 6) scala> it.toList res3: List[Int] = List()
次にXXXXXXの部分をArrayBufferにします。take(n) 自体は成功しますが、イテレータは進まずに常に先頭の要素を指すイテレータが返されてしまいます。
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.7.0_25). Type in expressions to have them evaluated. Type :help for more information. scala> val a = scala.collection.mutable.ArrayBuffer(0, 1, 2, 3, 4, 5, 6) a: scala.collection.mutable.Buffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6) scala> val it = a.iterator it: Iterator[Int] = non-empty iterator scala> val it2 = it.take(2) it2: Iterator[Int] = non-empty iterator scala> val it3 = it.take(3) it3: Iterator[Int] = non-empty iterator scala> val it4 = it.take(4) it4: Iterator[Int] = non-empty iterator scala> it2.toList res0: List[Int] = List(0, 1) scala> it3.toList res1: List[Int] = List(0, 1, 2) scala> it4.toList res2: List[Int] = List(0, 1, 2, 3) scala> it.toList res3: List[Int] = List(0, 1, 2, 3, 4, 5, 6)
IteratorのScala-doc(リンク)を見ると「take呼んだ後のイテレータは再利用すんなボケナス(意訳)」って書いてあるように読めます。
じゃあイテレータを再利用して良いのはどういう場合?next() だけ?不便だなあ…。
普段、音楽は聴かないですが、気に入った曲があるとヘビーローテーション(気に入った一曲だけ、半日ループx 1週間)します。最近はMy Wayがローテーション中です。
古い歌だからかYouTubeにてGoogleさんに消されることなく、いろいろな動画が残っています。元祖Frank SinatraさんのちょっとクセのあるMy Wayも、尾崎紀世彦さんのスッキリとしたMy Wayも、素敵ですね。
英語歌詞をチラ見したら、全く意味がわからなくてビビったので、ちょっくら訳してみました。
…と、軽い気持ちで始めたところ、意味が分からん部分が多すぎて、めちゃくちゃ時間かかるわ、無理やり訳したから和訳も意味不明になるわで、俺、真夜中に何してんだろ?てな状態でした。
多分に致命的な間違い(意味が逆になっているとか、係る語や文節が間違ってるとか)があると思うので、コメントにてぜひ教えてください…。
And now, the end is near 今、終わりは近い And so I face the final curtain そう、私は死の間際にある(curtain: 間際(死の)?) My friend, I'll say it clear 友よ、これは明らかに言える(itは死を指す?) I'll state my case, of which I'm certain 私自身のことを、確信をもって言える(可能のwill?) I've lived a life that's full 充実した人生を送ってきた I traveled each and ev'ry highway ありとあらゆる道をひたすら歩いてきた(highway: 目的に直通する道の意味?) And more, much more than this, I did it my way そう、だがそれ以上に、自分の道を来たんだ Regrets, I've had a few 後悔がないといえば嘘になる(肯定的に訳すと、後悔は少しだけしている、になるが変な感じ…) But then again, too few to mention だがそう言っても、後悔の話なんてほとんどしない I did what I had to do, I saw it through without exemption やるべきことはやったし、もれなくやり遂げた(see it through: やり遂げる?) I planned each charted course, each careful step along the byway 進むべき道について、慎重に脇道に沿って進むように、計画した (意味わからんな、each〜 は両方plannedにかかってるのか?) And more, much more than this, I did it my way だが、それ以上に、自分のやり方で来たんだ Yes, there were times, I'm sure you knew When I bit off more than I could chew そう、無理をしたときもあった、君も知っているはずだ(bite off more than one can chew: 背伸びする) But through it all, when there was doubt I ate it up and spit it out 不安があったときでも、最後まで何が何でもやりきった(ate it up and spit it out: 食いつくし、吐き出した) I faced it all and I stood tall and did it my way 全てに立ち向かった、断固とした態度で、信じた道を来たんだ(stand tall: 断固とした態度を取る) I've loved, I've laughed and cried 愛して、笑って、そして泣いたときもあった I've had my fill, my share of losing 満たされたこともあった、失うこともあった(one's fill: たらふく、十分なほど) And now, as tears subside, I find it all so amusing そして泣き止んだら、そんな(つらい)ことも皆、楽しんでいたと気づく(tears subside: 涙がどこかに行く?) To think I did all that (今まで)やり遂げてきたことを思えば、 And may I say, not in a shy way, 私はひるむことなく、こう言うだろう(shy way from〜: ひるむ、尻込みする?) "Oh, no, oh, no, not me, I did it my way" 「いやいや、私はいいんだ、信じた道をやり遂げたんだ」(not meって何?意味わからん…) For what is a man, what has he got? どんな人として、何を得てきただろう?(意味わからん…) If not himself, then he has naught To say the things he truly feels and not the words of one who kneels その人自身でなければ、その人の 懺悔の言葉も、本当の想いも言うことは叶わない(kneels: ひざまずく→懺悔orお祈り?) The record shows I took the blows and did it my way! 証拠は私がぶちのめし、やり遂げたこと(=困難?)を示している(意味わからん…、blow: 強打?) Yes, it was my way それこそが、私の生きた道
何が悲しいって、数時間かかって訳したのに、和訳開始10分くらいで掴んだ理解「そろそろお迎えが来るよ、色々あったけどさ、悔いのない人生だったね。うん。」から、私の理解が大きく変わることがなかった、ってことですよ。ほんと残念。
私はちょうど30歳で昭和生まれなので「昭和生まれのオッサンでー」などと冗談にすることはありますが、正直なところ、昭和に対し「懐かしい」とか「あのころは○○だった」という思いはないです。
昭和の方が良かったという意見は否定しません、しかし、同意もできません。私自身、昭和をほとんど覚えておらず、良かったのか悪かったのかがわからないからです。
数えたらわかりますが30代の生まれ年って昭和末期も良いところなんですよ。よく覚えているねってくらいギリギリです。
例えば、私を含む30代前半(30〜35歳)の人が昭和を生きた時間は6〜11年です。世の中に関心を持ったのが6歳だとしても、見聞きできるのは、精々、昭和末期の5年間です。
それほど幼く、覚えているかいないかギリギリの時代に対し「あのころは○○だった」と語ったり、一番親しみが沸いたりするのは、ちょいと珍しい部類じゃないかと思うわけですよ。
で、何が言いたいかというと、僕らは昭和生まれではありますが、どちらかというと「我ら昭和世代!」というより「我ら平成世代!」という方がしっくり来ますよね、ってことです。
とまあ、こんなことを考えているうちに、今年もあと1か月。
無事30歳を迎えた、記念すべき2013年ももう終わりです。最近、時の流れが早いね。
斜めにぶっ飛んだピュアオーディオ(笑)がオカルトじみて感じるのは、おそらくエセ科学の常套手段、
に当てはまっちゃっているから、オカルトと区別がつかないというか、オカルトと同類に見えてしまうのだと思います。
例を挙げると…、
1. は「アレとコレで音が良くなる。」で終わりだったり、何をもって「音が良い」とするか基準すらない、などのパターンです。
2. は「アレとコレで、ソレになるから、音が良くなる。」とあるのに「ソレと音が良くなる(悪い)の関連」が不明瞭です。
その点をツッコむと「音を聞けばわかる、お前も試せ」と逆切れするパターンです。
3. は全く同じ実験環境は二度と用意できない、自説に都合の良い結果だけ拾って見せびらかす、などです。
1. や2. は勘違いや、早とちりかもしれませんので、まだ話し合いの余地はありますが、
3. はミスリードを狙って、故意にやってると思われるので、
「目を合わせない」「話しかけない」「近寄らない」
が一番かもしれません…。
< | 2013 | > | ||||
<< | < | 11 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
合計:
本日: