soukouki’s diary

この記事が、誰かの役に、なればいい。

Ruby

Ruby いろんなループ(トリッキーなもの含む)

ループと言いつつ、やっているのは1から10の整数の乱数を作って、そこから6以上の値はもう一度やり直す。というもの 言い換えると、途中脱出が可能な無限ループです。え?スタックオーバーフロー?・・・ puts "loopを使ったもの。多分これが一番メジャー" a…

メモ Ruby対数正規分布の乱数

(2017/11/16)あああタイトル間違ってましたぁ・・更新前に見た方申し訳ないです・・ 合っているかは自信ないです・・ ゲームの乱数くらいにお使いください。 require "random_bell" # http://pmsl.planet.sci.kobe-u.ac.jp/~seto/?page_id=316 # をRubyに移…

Ruby 呼び出せないメソッド

define_method("!bar", ->{"foo"}) p method("!bar") p method("!bar").call # 呼び出し方 !bar #< 呼び出せない こんなことができるとは思ってなかった ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]にて確認

Hamlの組み込み

Hamlをテキストから直接実行したいときのメモ require "haml" template = <<'EOS' %p= a1 %p= a2*3 - a3.each do |i| %p= i**2 EOS haml_engine = Haml::Engine.new(template) puts haml_engine.render(Object.new, a1:123, a2:10, a3:[1, 2, 3, 5]) ヒアド…

Ruby:実行中のソースコードのファイルがあるディレクトリ

いいページがあるものの、検索でなかなか引っかからないので自分でページを作ってみた。 d.hatena.ne.jp これのものです。 File.expand_path(File.dirname(__FILE__))

Rubyでの実行されない宣言

((false)? a=123 : nil) この後のaの値が気になる。 実際にやってみた。 irb(main):001:0> ((false)? a=123 : nil) => nil irb(main):002:0> a => nil nilが代入されていた。 それならifはどうなるのか、 irb(main):003:0> if(false); b=123; end => nil irb…

メモ: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で書いてる時みたいなデバックのしやすさがあればいいのに。