🐈
[Feature #20676] Pathname を比較可能にしたいチケット
[Feature #20676] Pathnames aren't Comparable
-
Pathname
を比較可能にしたいというチケット - モチベーションとしては
Pathname("/a/b").to_s <= Pathname("/a/b/c").to_s
- を
Pathname("/a/b") <= Pathname("/a/b/c")
- と書きたいとのこと
- これなんですが
Pathname#<=>
はすでに定義されているのでinclude Comparable
すればシュッと実現できるんですね- 一緒に出されていた PR もそれをしているだけ
- Make Pathname comparable by gmcgibbon · Pull Request #40 · ruby/pathname
require "pathname"
class Pathname
include Comparable
end
pp Pathname("/a/b") <= Pathname("/a/b/c")
# => true
- ただ、これなんですが
Pathname#<=>
では単にパスを文字列として比較しているだけなので厳密にはディレクトリ構成に依存しない形での比較になります
require "pathname"
class Pathname
include Comparable
end
# /a/c は /a/b のサブディレクトリではないが true を返す
# これは Pathname("/a/b").to_s <= Pathname("/a/c").to_s と等価
pp Pathname("/a/b") <= Pathname("/a/c")
# => true
- これを満たす場合は
#start_with?
を利用するほうがいいんじゃないか、みたいなコメントもされてますね
# これは String#start_with? を使った場合を想定
(Pathname("/a/b/c").to_s+"/").start_with?(Pathname("/a/b").to_s+"/")
- このチケット自体は Feedback という形で閉じられています
Discussion