Ruby
括弧の前のスペース March 26, 2009 14:13
- Permalink
- Comments (322)
- Trackbacks (0)
Ruby
puts ([1] + [2,3,4]).join('-')
# -> 1-2-3-4
$stdout.puts ([1] + [2,3,4]).join('-')
# -> 1
# 2
# 3
# 4
# undefined method `join' for nil:NilClass (NoMethodError)
レシーバがいると引数の括弧として見なされるのか。先にjoinとくっついてほしいところ。
yonda February 20, 2009 00:31
- Permalink
- Comments (58)
- Trackbacks (0)
book, Ruby
オライリージャパン
売り上げランキング: 1618
そういえばこれも読んだ。
毎日コミュニケーションズ
売り上げランキング: 10807

プログラミング言語の世界へようこそ!!rescue => eでローカル変数上書き February 11, 2009 18:39
- Permalink
- Comments (328)
- Trackbacks (0)
Ruby
e = "example" p e #=> "example" begin raise rescue => e end p e #=> RuntimeError
しかしはまることはなかなかなさそうだ。
64bitのubuntuでrubyのgd2がこけた February 01, 2009 03:56
- Permalink
- Comments (321)
- Trackbacks (0)
Ruby
/usr/lib/ruby/gems/1.8/gems/gd2-1.1.1/lib/gd2/font.rb:234: [BUG] Segmentation fault ruby 1.8.6 (2007-09-24) [x86_64-linux]
あー。
Ruby 1.8.7を落としてきて2006年のruby-talkにあったパッチをあてた。
動いた。
and or && January 01, 2009 04:12
- Permalink
- Comments (334)
- Trackbacks (0)
Ruby
def foo return true and true end #=> void value expression(Syntax Error) # 正しくは def foo return (true and true) end #または def foo return true && true end
んんん、andはどんだけ弱いんだよ。
基本的にand/or派だったけど、&&/||を使うようにしようかな。文字数も少ないし。
Numeric#step October 07, 2008 00:24
- Permalink
- Comments (1890)
- Trackbacks (0)
Ruby
step(limit) {|n| ... }
step(limit, step) {|n| ... } (ruby 1.7 feature)
self からはじめ step を足しながら limit を越える前までブロックを繰り返します。step は負の数も指定できます(省略時は 1)。また、limit や step には Float なども指定できます。
んー。
5.upto(10) { ... }
と
5.step(10) { ... }
が同じだったりするので、引数のstepを省略できることってそんなにうれしくなくて。
「むしろlimitのほう省略できたら良かったのにな、こっちで適当にbreakするからさ」
てことないかなぁ。
欲しいのはこんなの。
class Numeric
def step2(step = 1, limit = nil)
n = self
loop do
yield n
n += step
break self if limit and n > limit
end
end
end
以下のように書きたいなと思ってstep調べたら使えなかった、というわけです、話の発端は。
0.step2(limit) do |offset| books = Book.find(:all, :offset => offset, :limit => limit) break if books.empty? ... end
数行の省略のために特定のケース持ち出して仕様に文句つけるなって感じですよね本当にすみませんでした。
File.size? October 06, 2008 23:57
- Permalink
- Comments (315)
- Trackbacks (0)
Ruby
FileTest.size?(filename)
filename のサイズを返します。filename が存在しない時や filename のサイズが0の時には nil を返します。
こういう振る舞いをするメソッドは便利な気もするし存在すること自体は全然いいんだけど、
名前から「?」剥奪しましょうよ。まだsize!のほうがいいよ。
とギリギリRails世代が言っております。 ひっこんでろって感じですよねすみません。
RubyのURIライブラリがクローラに最適過ぎる件 September 05, 2008 03:21
- Permalink
- Comments (2266)
- Trackbacks (0)
Ruby
URI#+が賢いって話を以前書いたんだけど、
さらにこんな振る舞いをすることをさっき知った。
uri = URI.parse('http://fg-180.katamayu.net')
(uri + 'http://twitter.com/yazu').to_s #=> "http://twitter.com/yazu"
ところで、//a/@hrefをぶっこ抜くと大体
/abc/def.html ghi.html ../jkl.html http://mno.pqr.com
という感じで形式がばらけてるんだけど、 今いるページのURIと+するだけでこれがキレイになってしまう。
current_uri = URI.parse('http://example.com/123/')
(current_uri + '/abc/def.html').to_s #=> "http://example.com/abc/def.html"
(current_uri + 'ghi.html').to_s #=> "http://example.com/123/ghi.html"
(current_uri + '../jkl.html').to_s #=> "http://example.com/jkl.html"
(current_uri + 'http://mno.pqr.com').to_s #=> "http://mno.pqr.com"
あとはこれらのURLをたどるだけですね。 あ、baseタグ使われてたら知らんよ。 絶滅したと思ってたのについこの間見たんだよなぁ。
んー、でもWWW::Mechanizeもこれくらいしそうだなぁ。
Array() September 05, 2008 02:24
- Permalink
- Comments (1919)
- Trackbacks (0)
Ruby
Array("hogehoge") # => ["hogehoge"]
Array(["hogehoge"]) # => ["hogehoge"]
おお。気が利くNE☆
あと
Array(nil) #=> []
だったり。
そうすると例えば「config['url']は文字列でも配列でも、不要なら指定しなくても良い」みたいな、
どんだけ優しいんだよ! って機能がこれだけで片付くことに気がついた、そんな眠れない夜。
urls = Array(config['url'])
urls.each { データ(笑)を収集 }
Date.parseでこけた January 20, 2008 19:04
- Permalink
- Comments (2336)
- Trackbacks (0)
Ruby
ruby 1.8.5
irb(main):001:0> Date.parse('18/Jan/2008')
ArgumentError: 3 elements of civil date are necessary
from /usr/lib/ruby/1.8/date.rb:650:in `new_with_hash'
from /usr/lib/ruby/1.8/date.rb:695:in `parse'
from (irb):1
ruby 1.8.6
irb(main):001:0> Date.parse('18/Jan/2008')
=> Fri, 18 Jan 2008
おおう。さっさとバージョンあげろってことか……。
irb(main):001:0> Date.parse('18/Jan/2008')
ArgumentError: 3 elements of civil date are necessary
from /usr/lib/ruby/1.8/date.rb:650:in `new_with_hash'
from /usr/lib/ruby/1.8/date.rb:695:in `parse'
from (irb):1
irb(main):002:0> Date.parse('18/Jan/2008'.tr('/', '-'))
=> #<Date: 4908967/2,0,2299161>
あww とりあえずこれでお茶にごしとくかw


