不要になったファイルをdeadwood.txtとすると以下の手順でgit管理から外せる
1. git rm でまずファイルを削除
$ git rm --cached deadwood.txt
2. deadwood.txtを.gitignoreに追加する
上記手順だとdeadwood.txtのファイル自体は削除されず、gitから消されるだけ。
なお、.gitignoreに追加するだけでは反映されないことがあるらしい。
その場合下記手順を実行する。
1. $ git rm -r --cached .
2. $ git add .
git rm -r は、オプションなしで行うと全て消し去り、インデックスにステージしてしまう。
# それにしてもITってインデックスって言葉いろいろな意味で使い過ぎでは…。
参考:Qiita - .gitignoreの設定を反映させる
2014年2月17日月曜日
2014年2月10日月曜日
Rubyの排他的論理和(xor)
料金設定に関するコードで、
Rubyでは、シンプルに「^」(ハット)で書けるらしい。
演算子「^」は引数は真偽値か数値しか取らない。排他的論理和が必要な場合、引数がBooleanでない場合にはブール値に変換してやる必要がある。
これをしないと、型によっては想定外の結果が返ってくる。
7はtruthy、4はtruthyだから、truthy^truthy=falsy、と思っていると、戻り値が3(truthy)。
そこで、ブール値への変換ですが、例えば「!!」を使う。
Railsだったらpresent?を使うと便利かも。
unless a xor b # 擬似コードつまり「排他的論理和の否定」という条件が普通に必要になりました。
Rubyでは、シンプルに「^」(ハット)で書けるらしい。
a ^ b # aとbの排他的論理和 true ^ true #=> false true ^ false #=> true false ^ true #=> true false ^ false #=> false
演算子「^」は引数は真偽値か数値しか取らない。排他的論理和が必要な場合、引数がBooleanでない場合にはブール値に変換してやる必要がある。
これをしないと、型によっては想定外の結果が返ってくる。
7 ^ 4 #=> 3 [1,2] ^ [3,4] #=> NoMethodError: undefined method `^' for [1, 2]:Array^というメソッドを持っていない型はエラーが出るし、数値だとビット演算の結果が返ってくるので、7(10) ^ 4(10) = 111(2) ^ 100(2) => 011(2) => 3(10)となるわけ。
7はtruthy、4はtruthyだから、truthy^truthy=falsy、と思っていると、戻り値が3(truthy)。
そこで、ブール値への変換ですが、例えば「!!」を使う。
!!a ^ !!b #=> aの真偽値とbの真偽値の排他的論理和 !!7 ^ !!4 #=> false !![] ^ nil #=> trueString(!!"hoge")だと確かに変換はされましたが、
warning: string literal in conditionwarningが出ました。ユーザ定義クラスとか配列だと特に問題なかった。
Railsだったらpresent?を使うと便利かも。
a.present? ^ b.present?ただ、present?は、{}(Hash)、[](Array)、""(String)はfalseを返すのでご注意。
"".present? #=> true !!"" #=> falseその方が都合がいいケースはもちろんあるでしょう。
登録:
投稿 (Atom)