Ruby
一昨日書いたparser generatorだけど,設計上の問題があることがわかってたのと,Ruby Library Report 【第 6 回】 正規表現と構文解析を見つけたので何か書く. 読みにくい 書きやすいのだが読みにくい感は否めない.tdp4rのように演算子を使う書き方を検討…
現状こんな感じで書ける. lexer = Lexer.new("x + 4 * 5", /[ \t\n\r\v]+/) { token(:operator, /[+]/) {|ma| ma[0].to_sym } token(:operator2, /[*]/) {|ma| ma[0].to_sym } token(:integer, /[0-9]+/) {|ma| ma[0].to_i } token(:identifier, /[a-z]+/) …
indexで参照するには代替手段が用意されてるけど,名前で後から参照することができないようだ. s = StringScanner.new("hoge") s.scan(/.(?<k>.)/) p s[1] # => "o" p s[:k] # => -:4:in `[]': can't convert Symbol into Integer (TypeError)</k>
英字キーだとString,Returnや矢印キーではFixnumが返ってくる.1.8ではどちらもFixnum. バグじゃね?どっちかに統一すべきだろ…と思ってたらこんなソース. /* def getch */ static VALUE curses_getch(VALUE obj) { int c; rb_read_check(stdin); curses_…
埋め込みドキュメントとかいろいろおかしいところがあったと思うけど,演算子のaliasでおかしくなるのをみつけた. aliasの次の行のインデントがずれる. alias hoge + # ずれる alias hoge == # ずれる alias hoge :+ # ずれない alias hoge :== # ずれる a…
1000個で6秒程かかる.to_iしてMarshal.dumpなら0.01秒くらい.タイムゾーンとかインスタンス変数とかなくなるけど.って精度が下がるか. それにしてもかかりすぎじゃない? require 'benchmark' class C def initialize(sec) @t = Time.at(sec) end def _d…
Ruby1.9になって文字コードの数値リテラル(?aとか)が文字列リテラルになったのがどうしても納得できない. バージョンアップでリテラルの意味が変わるなんて,これ以上の驚きはそうそう無いと思う. 今は数値(97とか)を生で埋め込んでるけど分かりにくくて仕…
RBTree 0.2.1が1.8.xでしか動かないみたいなので,1.9.1で動くようにしてみた. RStringやRArrayのメンバをマクロを通してアクセスするようにして,rb_inspecting_pやrb_protect_inspectを使っている所をrb_exec_recursveを使うようにした. testは大体通っ…
You may encounter a bug of Ruby interpreterとか出てきて焦ったけど,ruby19 extconf.rbして,.oファイル消してmakeしたら1.9.1で動くようになった(1.8.7では動かなくなった). 単に互換性がないのね. CレベルでのStringやArrayの扱い方が変わったみたい…
1.8.7ではps(1)に反映されたのに,1.9.1では反映されなかった. http://redmine.ruby-lang.org/issues/show/214 バグ?ソースを読む限りではMacの場合だけわざわざmallocして頑張ってコピーしているように見えるけど… 細かい所で挙動の違う所が多いなぁ.
いろいろ間違ってる気がするけど,とりあえず(マイリストの取得については)こういうことをすれば動いた. module Nicovideo class Page original_register_getter = instance_method(:register_getter) define_method(:register_getter) {|params| original_…
Nicovideo::MyList#initializeとかでregister_getterを呼んでるけど,これだとメソッドがNicovideo::Pageに定義される.あと,オブジェクトを生成する度に再定義される気がする.これは意図した挙動じゃないんじゃ?
今度のは難しいぞ! 継承は関係なかったので問題を修正. (1) class A def initialize eval "def f() 3 end" end end p A.new.f (2) class A private def initialize eval "def f() 3 end" end end p A.new.f
ねんがんの デフォルトひきすうをてにいれたぞ! (1) proc {|x = 3| x } (2) proc {|x = 3 + 4| x } (3) ->(x = 3 + 4) { x }
$ gem --version 1.3.5 $ ruby19 -S gem --version 1.3.1うひょー $ sudo ruby19 -S gem update --system $ sudo ruby19 -S gem install nicovideoなんか2重にインストールしてるみたいで,なんか勿体無いなぁ.
http://coderepos.org/share/browser/lang/ruby/nicovideo_gem/trunk/lib/nicovideo/mylist.rbの22行目, attr_reader :myliset_id は attr_reader :mylist_id の間違いじゃないかと思うんだけど,どこに言えばいいのやら….
時系列 マイリスト取れるらしい.*1 gem install nicovideoでなんかできるらしい.*2 sudo gem install nicovideoしてみたが,gemのversionが低いと言われ,gem update --system gemがやたら重い. 今度こそsudo gem install nicovideo→インストールはできた…
レポート課題で行列計算が必要だったのでいつものようにRubyで書いた. http://d.hatena.ne.jp/varutsu7/20090721/1248203955 ソース載せてる人が居るので俺の落書きコードも晒してみる. require 'matrix' require 'mathn' mat_h = Matrix[ [0, 1/2, 1/4, 0…
unfold系は2-3個ブロック受け取りたいよね.まぁ,構文上・実装上の制限があるんだろうけど….構文上困るのはyield辺りかな.Proc生成せずに名前付けて(または番号で)yieldできると嬉しいんじゃないかなぁ. Schemeとかだと生成コストがどうのってのはインラ…
MacOSX(10.5.7)にインストール. ./configure --enable-shared --enable-pthread --program-suffix=19 make make test sudo make install 何故か今度はmake testが通った.前回. $ ruby19 -v ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-darwin9.7.0…
$ ruby bus_error.rb bus_error.rb:5: [BUG] Bus Error ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.6.1] Abort trapbus_error.rbの中身: def f yield end f(&:a) OSはMac 0S X(10.5.7). バグ報告しようと思ったけど,やり方がよく分からないの…
$ ./configure --enable-shared --enable-pthread --with-readline-dir=/usr/local (略) configure: WARNING: unrecognized options: --with-readline-dir$ make test (略) #225 test_io.rb:11:in `<top (required)>': begin require "io/nonblock" r, w = IO.pipe w.nonbloc</top>…
module_functionのmoduleの部分だけ青くなって気持ち悪い.最近のruby-modeはこうなのか… とりあえず応急処置した. (modify-syntax-entry ?_ "w" ruby-mode-syntax-table)
前回の日記ではまだおかしかったのでまた修正. (add-hook 'ruby-mode-hook '(lambda () (add-to-list 'ruby-font-lock-keywords '("\\(?:^\\|[^:]\\)\\(:\\(\\(\\$\\|@\\|@@\\)[_a-zA-Z][_a-zA-Z0-9]*\\|[A-Z][_a-zA-Z0-9]*[!?=]?\\)\\)" 1 font-lock-const…
前の日記ではFoo::Barの色がおかしくなるので,修正した. :foo :Foo :Foo= :@foo :@@foo :$foo Foo::Bar (add-hook 'ruby-mode-hook '(lambda () (add-to-list 'ruby-font-lock-keywords '("\\(^\\|[^:]\\):\\(\\(\\$\\|@\\|@@\\)[_a-zA-Z][_a-zA-Z0-9]*\\|…
Leopardだと最初から入っているので,require 'osx/cocoa'すればいいと書いてあるんだが,no such file to loadとなってしまう. 明らかにロードパスの通っている所にosx/cocoaなんてないので,それっぽいのをロードパスに追加して irb -I /System/Library/F…
現状.10B,20B.
20bytes.るびまゴルフの方もそれに会わせて短くなった.
p :Foo= # => :"Foo=" あれ,要らないダブルクォートが.
http://jp.rubyist.net/magazine/?0025-RubiMaGolf 現状.