soukouki’s diary

なんとなく思ったこととかを書いてたりする。

Ruby

メモ:Rubyで一つの文字列を受け取るソフト

受け取るところを (ARGV[0] || gets) こう書けばいい。

少しclojureに触れてみた感想

ringとか使ってました。 感想は「始めやすいlisp」という感じでした。 同じことをruby、scheme、clojure(末尾再帰最適化なし・あり)で書いてみました(短いのであまり参考にはならないかもしれませんが・・・) def power(a, b) power_i(a, a, b) end def powe…

Rubyのメソッドチェーンのデバッグ方法

また忘れてしまっていたので。 >>>>> tap <<<<< 誰かのtap押しの記事。 qiita.com 間違えてdupって書いてた。

rakeで、フォルダの中身を全て列挙する

folder1と、その中身を列挙したい。 files.include(%W{folder1}) # => ["folder1"] # 中身が列挙されない。 files.include(%W{folder1/*}) # => ["folder1/file2.txt", "folder1/folder2"] # folder1自体と、folder2の中身が表示されない。 files.include(%W…

Rubyのmethodsはインスタンスにするかで結果が変わる

pryで見てる時に、なんか目的のメソッドが出てこないなと思っていたけど、やっぱり違うそうで。 class Aaa def a_i end def self.a_c end end p Aaa.methods - Object.methods # => [:a_c] p Aaa.new.methods - Object.new.methods # => [:a_i] Objectからあ…

rakeのtaskに引数をつける

元 qiita.com 付け方、実行の仕方を何回も忘れるのでここに書いておく。 task :default, [:args1]do |task, args| p [task, args] end $ rake default[aaa] ["default", <Rake::Task default => []>, {:args1=>"aaa"}] もう一つタスクを定義してみる。 task :default, [:args1] => </rake::task>…

Rubyで、代入に=を使ったdslの作り方。

こんなのを読み込みたかった aaa = 123 bbb = 456 ほかのサイトだと「作れない」と書いてありますが、全然いけます。 def run(__path) __src_binding = eval(open(__path).read+"\nbinding") __src_binding .local_variables .delete_if{|name| name.to_s[0.…

メタプログラミングRubyを読んで(4)

最終回です。 前回 eval class AAA def get_binding binding end def aaa @aaa end end aaa = AAA.new aaa.aaa # => nil aaa.bbb # NameError: uninitialized class variable @@bbb in AAA aaa.get_binding # => #<Binding:0x00000002a16ab0> eval("@aaa=123",aaa.get_binding) aaa.aaa</binding:0x00000002a16ab0>…

Rubyの継承とmix-inをdotにするツールを作った

使ってやってください。 github.com 利用方法 ソースをコピーしてくる。 それをプロジェクトのパスから実行する。 ソースのファイルのパスを入力する。 図にするmoduleを入力する。 inheritance.dotにdotファイルがが出力される。 使い勝手が悪いかもしれま…

Rubyでeachしている時に次の要素に移るキーワード

eachで今の要素の処理をやめて、次の要素に移りたい時に 「forみたいにbreakで行けるでしょー」 (1..4).each do |n| break if n<=2 p n end 「あれ?何も出ない?」 =>調べる (1..4).each do |n| next if n<=2 p n end # 3 # 4 nextでした

Rubyで入力を配列にする方法

STDIN.readlines だけです。getsなんていりません! ただ、改行は残ってしまうので、 STDIN.readlines.map(&:chomp) こうしておきましょう。

raccでは日本語が使えないっぽい。=>そんなことなかったです。

文法定義ファイルの先頭に# coding: utf-8って書いとけば良いみたいです。 誤った情報を流してしまい、すみません。 でもsampleにはのってないんだよね。 間違った記事 soukouki.hatenablog.jp

メタプログラミングRubyを読んで(3)

前回 5.5まで(一部理解できてない) 特異メソッド a = [1,2,3] b = [1,2,3] c = a def a.xx self.inject(:+) end a.xx # => 6 b.xx # NoMethodError: undefined method `xx' for [1, 2, 3]:Array c.xx # => 6 [1,2,3].xx # NoMethodError: undefined method `…

メタプログラミングRubyを読んで(2)

前回 読んでたら疲れたので第4章までで知ったこととか。 ObjectはKernelモジュールをincludeしている なので def aaa "call aaa(#{self})" end aaa #=> "call aaa(main)" [].aaa #=> "call aaa([])" /aaa/.aaa #=> "call aaa((?-mix:aaa))" 余り使うことはな…

メタプログラミングRubyを読んで(1)

メタプログラミングRuby(第2版)を図書館でリクエストしていて、今日やっと届きました。 7月30日までに返さないと <- とりあえず第3章まで読んだので覚えたこととか。 使いすぎは良くない(当たり前) メタプログラミングにも静的なものと動的なものがある。 …

rubyの%記法って色々あるんですね。

blog.toshimaru.net を見て。 使えそうなところにはどしどし使っていきたいです。

タイプミスで数時間潰した

resulr = val[0] / val[2] 分子の方しか出てこなくてあーだこーだやってやっと見つかった。 正しいのは result = val[0] / val[2] resulr result ^

raccで変なエラー(またか)

修正前 | num '/' num { result = val[0]/val[2] } エラー内容 racc: E:/my-calc/my-calc/parser.rb.y:98: 98: unterminated regexp 98行目は rule...end の end のところ 修正後 | num '/' num { result = val[0] / val[2] } /の周りに空白を入れただけ エ…

シンタックスハイライトってこれでいいのか

今まで a = 1.5+1 b = String.new('str') STDOUT.puts "#{a},#{b}" これから a = 1.5+1 b = String.new('str') STDOUT.puts "#{a},#{b}" 前の記事も直しておきます。

何このエラー?

Racc::ParseError: parse error on value "$" ($end) C:/Ruby23-x64/lib/ruby/2.3.0/racc/parser.rb:528:in `on_error' C:/Ruby23-x64/lib/ruby/2.3.0/racc/parser.rb:259:in `_racc_do_parse_c' C:/Ruby23-x64/lib/ruby/2.3.0/racc/parser.rb:259:in `do_pa…

rubyで組み合わせを列挙したりするメゾッド

combination (1..4).to_a.combination(2).to_a => [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] permutation (1..4).to_a.permutation(2).to_a => [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3]]…

raccの続き

ruleの前に options result_var って書くと formula : low_priority_formula | exp '+' exp { result = val[0] + val[2] } | exp '-' exp { result = val[0] - val[2] } | exp '*' exp { result = val[0] * val[2] } こんな感じで書ける。 あとは、tokenの最…

raccでは日本語が使えないっぽい。(間違った情報でした)

間違った情報でした。 soukouki.hatenablog.jp 文法定義ファイルの先頭に# coding: utf-8って書いとけば良いみたいです。 コメントの場所でも C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/racc-1.4.14/lib/racc/grammarfileparser.rb:298:in `split': invalid b…

rubyのこととか?

良い言語って言われてて気になってはいたけど、 なんか避けてた1,2ヶ月前。今では一番好きな言語です。 c#をvisual studioで書いてる時みたいなデバックのしやすさがあればいいのに。

字句解析から構文解析まで

字句解析にはStringScannerを使いました ソース いつの間にか消えてたらすみません github.com 各ファイルの紹介 parser.rb.y 構文を指定してるファイル parser.rb 字句解析とraccの自動生成された部分のカバー parser-test.rb テスト test.rb テストをする…

raccをとりあえず動かした

とりあえずソースを parse.rb.y class Parser rule EXP : int { p val[0].to_i } end ---- inner def parse tokens @q = tokens + [[false, '$']] do_parse end def next_token @q.shift end perser-test.rb require_relative "./parser.tab.rb" P = Parser.…

raccをインストールしてみた。

osはwindowsです。 gem install racc Fetching: racc-1.4.14.gem (100%) ERROR: Error installing racc: The 'racc' native gem requires installed build tools. Please update your PATH to include build tools or download the DevKit from 'http://ruby…