2020/10/08 今週の気になった bugs.ruby のチケット
内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
あくまでも『わたしが気になったチケット』で全ての bugs.ruby のチケットを載せているわけではありません。
[Feature #17208] Add Set#compact
and Set#compact!
methods
Array#compact
やHash#compact
があるのでSet#compact
も追加しよう、という提案
# Set#compact! # Removes all nil elements from self. Returns self if any elements removed, otherwise nil. set = Set[1, 'c', nil] #=> #<Set: {1, "c", nil}> set.compact! #=> #<Set: {1, "c"}> set #=> #<Set: {1, "c"}> set = Set[1, 'c'] #=> #<Set: {1, "c"}> set.compact! #=> nil set #=> #<Set: {1, "c"}>
# Set#compact # Returns a new Set containing all non-nil elements from self. set = Set[1, 'c', nil] #=> #<Set: {1, "c", nil}> set.compact #=> #<Set: {1, "c"}> set #=> #<Set: {1, "c", nil}> set = Set[1, 'c'] #=> #<Set: {1, "c"}> set.compact #=> #<Set: {1, "c"}> set #=> #<Set: {1, "c"}>
Set
全然使ったことがないんですが#compact
があると便利なんですかね?- 一応
.reject(&:nil?)
で代替することは可能
[Feature #17210] More readable and useful Set#inspect
Set#inspect
の結果をより Ruby のコードに寄せようという提案
# before puts Set[1,2,3] # => "#<Set: {1, 2, 3}>" # after puts Set[1,2,3] # => "Set[1, 2, 3]"
- これは普通に便利そう
- こういうのの『スタイルガイド』があるといいんじゃないか、とコメントされてる
[Feature #13820] Add a nil coalescing operator
??
演算子を追加しよう、という提案??
は||
と類似しているが左辺がnil
のときのみ右辺を評価する- 左辺が
false
の場合は右辺を評価しない
- 左辺が
- 動作イメージは以下のような感じ
# || 演算子 42 || "homu" # => 42 nil || "homu" # => "homu" false || "homu" # => "homu" # ?? 演算子 42 ?? "homu" # => 42 nil ?? "homu" # => "homu" false ?? "homu" # => false
- ユースケースとしては以下のように意図的に
false
が値として受け取る可能性がある場合に||
だと意図しない動作をする可能性がある
def fetch(id, **opts) def fetch(id, **opts) host = opts[:host] || default_host https = opts[:https] || true port = opts[:port] || (https ? 443 : 80) # ... end host = opts[:host] || "default_host" # https: false の場合は false になってほしいのに true になってしまう… https = opts[:https] || true port = opts[:port] || (https ? 443 : 80) # ... pp host # => "default_host" pp https # => true pp port # => 443 end fetch(1, https: false)
- こういうケースで
??
を使うと右辺がfalse
の場合でもfalse
を割り当ててくれる - 関係ないけど世の中には
?:
という二項演算子があるらしいx = exprL ? exprL : exprR
をx = exprL ?: exprR
と書く?:
という演算子がエルビス・プレスリーの顔文字
に形が似ているので『エルビス演算子』と呼ばれてるらしい- https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%AB%E3%83%93%E3%82%B9%E6%BC%94%E7%AE%97%E5%AD%90
- https://kotlinlang.org/docs/reference/null-safety.html#elvis-operator