Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

はじめてのひき - RubySucks Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

! じゆうのせかい

!! クラス定義途中で飽きた

for i in 0..10
   class C
     def f
       puts 'hello'
     end

     break

     def g
       puts 'world'
     end
   end
end

C.new.f
C.new.g

これは g で例外が飛ぶ。

!! やっぱやめた

class C
   # useful definitions...!
end if false
C.new  # uninitialized constant C (NameError)

! おどろきさいしょうのほうそく

!! ぶろっく

def do_lambda
   lambda{
     return true
   }.call
   return false
end

def do_proc
   proc{
     return true
   }.call
   return false
end

def do_times
   3.times{
     return true
   }
   return false
end

p do_proc
p do_lambda
p do_times

!! map & inject

Ruby 1.9 にて

irb(main):007:0> [1,2].inject(&:+)
=> 3
irb(main):008:0> [1,2].inject(:+)
=> 3
irb(main):009:0> [1,2].map(&:to_s)
=> ["1", "2"]
irb(main):010:0> [1,2].map(:to_s)
ArgumentError: wrong number of arguments(1 for 0)
         from (irb):10:in `map'
         from (irb):10
         from /usr/local/lib/ruby/1.9.0/irb.rb:150:in `block (2 levels) in eval_input'
         from /usr/local/lib/ruby/1.9.0/irb.rb:259:in `signal_status'
         from /usr/local/lib/ruby/1.9.0/irb.rb:147:in `block in eval_input'
         from /usr/local/lib/ruby/1.9.0/irb.rb:146:in `eval_input'
         from /usr/local/lib/ruby/1.9.0/irb.rb:70:in `block in start'
         from /usr/local/lib/ruby/1.9.0/irb.rb:69:in `catch'
         from /usr/local/lib/ruby/1.9.0/irb.rb:69:in `start'
         from /usr/local/bin/irb-1.9.0-1-86:12:in `<main>'

! リテラル

!! %q

puts %q
puts

を実行すると puts と出力されます。

!! ひあどくめんとなんです

def f(*a)'a'end
p(f<<'a')
p(f <<'a')
a

を実行すると

"aa"
"a"

が出力される。

! すこーぷ

Python でも似た挙動をするものも多いか。

!! ブロック引数

irb(main):008:0> i = 0
=> 0
irb(main):009:0> 3.times{|i|p i}
0
1
2
=> 3
irb(main):010:0> i
=> 2

これは Ruby 1.9 で 0 に。

!! 代入されつつある変数の値

irb(main):004:0> n = [n, 1]
=> [nil, 1]

!! スコープを作らない if

irb(main):001:0> if false then n = 1 end
=> nil
irb(main):002:0> n
=> nil

n は定義されてしまっている。

!! 前置と後置で変わる

if n = 1 then p n end

は OK 。

p n if n = 1

はダメ。

! 文字化け

!! trailing :

if ?????:??:??end

1.8 feature が一箇所ありますどこでしょう。