ruby
前提 Ruby 2.2.3が導入済み 導入 sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev …
Ubuntu 14.04環境にて、rbenvで普通に(特にオプションなどを指定せずに)Rubyをインストールすると、Ruby/Tkが有効にならないようです。以下の操作で、Ruby/Tkを有効にした状態でインストールできました。 $ sudo apt-get install -y libreadline-dev $ sudo …
Rubyのcursesモジュールを使ってみたい、ということでインストールしました。 sudo apt-get install libncurses5-dev libncursesw5-dev gem install cursesところが、これでUTF-8の文字列を表示されると文字化けしてしまいました。。 悩んだ結果、libncurses…
まずはrbenvをインストールします。 git clone https://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc rbenv --version続いてruby-bu…
勉強がてら書いてみる。 def collatz count = 0 func = Proc.new do |n| if n == 1 then count else count += 1 if n.even? then func.call(n / 2) else func.call(n * 3 + 1) end end end end (2..10000).each do |i| puts collatz.call(i) end 恥ずかしな…
throw-catchで大域脱出ができるらしい。 # coding: utf-8 str = catch :escape do loop do puts "ループ1" loop do puts "ループ2" throw :escape, "脱出" end end end puts str 実行結果は以下のとおり。 $ ruby throw-catch.rb ループ1 ループ2 脱出
OptionParserってのを使うと簡単らしいです。 # coding: utf-8 require 'optparse' def cmdline args = {} OptionParser.new do |parser| parser.on('-f', '--foo', '真偽値オプション') {|v| args[:foo] = v} parser.on('-b VALUE', '--bar VALUE', '引数付…
クラス変数は継承される。 クラスインスタンス変数は継承されない。 # coding: utf-8 class Foo # クラス変数 @@var1 = 123 # クラスインスタンス変数 @var2 = 456 def self.var1 @@var1 end def self.var2 @var2 end end class Bar < Foo end p Foo.var1 p …
# coding: utf-8 class Foo def hello puts "hello" end end # クラスオブジェクトを変数に代入 a = Foo obj = a.new obj.hello 実行結果は helloです。
上から順に探索される。 1. 特異メソッド 2. そのクラスで定義したメソッド 3. includeしたmoduleで定義したメソッド 4. スーパークラスで定義したメソッド
Javaのprivateメソッドは「自クラス内でしか呼び出しができないメソッド」ですが、Rubyでは「レシーバを付けた呼び出しができないメソッド」です。あくまでそれだけです。自クラス外からも呼び出しができます。 # coding: utf-8 class SuperClass private de…
Rubyのexit関数はSystemExit例外を投げます。 begin exit rescue StandardError puts $!.class rescue SystemExit puts $!.class ensure puts "ensure" end puts "end" 実行結果は以下のとおり。 SystemExit ensure end
class Super @@x = 1 def self.x @@x end end class Sub < Super @@x = 2 end p Super.x 実行結果は以下のとおり。 2
こんなこともできるんですね。 class Foo end class Bar def Foo.foo puts "foo defined in Bar" end end Foo.foo 実行すると $ ruby other_class.rb foo defined in Bar
eql?は文字列の内容が等しい場合にtrueになる。 equal?は同じ文字列を参照している場合にtrueになる。 a = "abcd" b = "abcd" puts a.eql?(b) # true puts a.equal?(b) # false
Ubuntu 13.10で↓をやると怒られた。 $ sudo apt-get install sqlite3 $ sudo gem install sqlite3-ruby Fetching: sqlite3-1.3.9.gem (100%) Building native extensions. This could take a while... ERROR: Error installing sqlite3-ruby: ERROR: Failed …
Ruby + SQlite3の勉強をすべく、gemでsqlite3-rubyを導入しようとしてつまづきました。 $ sudo apt-get install ruby $ sudo apt-get install sqlite3 $ sudo gem install sqlite3-ruby Building native extensions. This could take a while... ERROR: Erro…
初期化されていないローカル変数を参照すると、NameErrorが発生します。例えば、以下のコードを実行すると def method(i) p a end method(-1) ローカル変数aは初期化されていないので、NameErrorになります。 local_init_1.rb:2:in `method': undefined loca…
falseとnilが偽、それ以外はすべて真。
Java try { // 処理 } catch (Exception e) // 例外処理 } finally { // 後始末とか } Ruby begin # 処理 rescue => e # 例外処理 ensure # 後始末とか end
どちらも同じ意味。 クラス名.メソッド名 クラス名::メソッド名
種類 記法 ローカル変数 先頭がアルファベット小文字か、"_" グローバル変数 先頭が"$" インスタンス変数 先頭が"@" クラス変数 先頭が"@@" 定数 先頭がアルファベット大文字
地道に書いてみる。 class Person # 参照 def name return @name end # 更新 def name=(value) @name = value end end これは、下記のように書くことができます。参照のみ class Person attr_reader :name end 更新のみ class Person attr_writer :name end …
Rubyのinstance_of?メソッドは、自分の直接の親クラスのみをチェックします。 そこから上にはさかのぼりません。さかのぼってチェックしたいときはis_a?メソッドを使います。 s = "hello" puts s.instance_of?(String) puts s.instance_of?(Object) puts s.i…
Rubyのinstance_of?メソッドは、自分の直接の親クラスのみチェックします。 それより上には辿りません。(Javaのinstanceofと違うんですね) array = [] puts array.instance_of?(Array) puts array.instance_of?(Object) と実行すると、結果は true falseとな…
5.times {|i| puts i} という書き方が今ひとつ理解できず悩んでしまいました。。 書き換えると、 5.times do |i| puts i end ということなんですね。納得できました。お恥ずかしい。。
Rubyでこんなコードを書いて、 file = open(ARGV[0]) UTF-8なファイルをオープンしようとしたら invalid byte sequence in Windows-31J (ArgumentError) と怒られました。openメソッドでは、モード引数で文字コードを指定できるようです。 file = open(ARGV[…
rubyコマンドに-eオプションで実行できる。 ruby -e 'puts "hello"'
falseとnilは偽、それ以外は真