はじめてのひき - 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 が一箇所ありますどこでしょう。
!! クラス定義途中で飽きた
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 が一箇所ありますどこでしょう。