空白で区切って指定したフィールドの文字を取得
$ echo "1 2 3" | cut -d " " -f3 3
■
def check_names names return unless Hash === names invalid_options = names.keys.map { |k| k.to_sym } - [:rdoc, :clobber_rdoc, :rerdoc] unless invalid_options.empty? then raise ArgumentError, "invalid options: #{invalid_options.join ', '}" end end
今日は、rdoc の task.rbを読んだ。これは、名前をチェックするメソッドで、 hashのキーが指定したものだけであることをチェックしている。
Rubyの特殊変数メモ
Classをインスタンス化する時にHashで渡した値でInitializeする
Classをインスタンス化する時にHashで渡した値でInitializeする
class Person attr_accessor :name, :age, :address def initialize( hash={}) if block_given? yield( self ) else hash.each do |k, v| public_send("#{k}=", v) if respond_to?("#{k}=") end end end def to_s instance_variables.map do |ivar| value = self.send( ivar.to_s.tr("@", "")) "#{ivar}: #{value}" end.join(", ") end end p1 = Person.new({name: "taro", age: 20, address: 'tokyo'}) puts p1 p2 = Person.new do |f| f.name = "jiro" f.age = 30 f.address = "tokyo" end puts p2 class Man < Person def initialize(hash={}) super(hash) end end puts Man.new({name: "saburo", age: 25, address: "saitama"})
Hash.newにブロックを渡す
以下の記事を読んで初めて知ったのでメモ。
Ruby で メモ化カッコカリ( #rubytokai 発表メモ) - 名古屋で数学するプログラマ(仮)
Hash.new にブロックを渡すことができる。
このブロックはすぐには実行されずに、h["key"] と言う形で参照されたキーがhash内に存在しない時に 呼ばれる。いわゆる遅延実行。
h = Hash.new do |hash, key| hash[key] = 9999 + 9999 # 思いつかないけど何か時間のかかる処理 end h["a"] p h["a"] # => 19998 p h["a"] # => 19998
これを利用してメモ化を実装できる。
atomのタブやfuzzy-finderなどのフォントサイズを一括で変更するbash script
仕事でノートPCをモニタにつないだり、ノートPC本体だけで使ったりすることがあり、
atomの編集部分以外のフォントサイズを手軽に一括で変更したくて書いた。
### change atom font size atom_font() { cd ~/.atom/styles case "$1" in "pc" ) ln -sfv font_pc.less font.less;; "monitor" ) ln -sfv font_monitor.less font.less;; * ) echo "please specify 'pc' or 'monitor'" esac pops }
各環境ごとのフォントサイズをファイルに書いておく。
今回は .atom/stylesにファイルを作成した。
$ cat styles/font_pc.less @font_size: 15px; // PC $ cat styles/font_monitor.less @font_size: 20px; // monitor
atom の styles.less
側では @import しておく。
@import "./styles/font.less"; // Font size // 検索結果, 検索タブ, タブのタイトル body, html, .panel-heading, .title, .file.entry, .directory.entry { font-size: @font_size; } .fuzzy-finder { font-size: @font_size; } .command-palette { font-size: @font_size; }
pc モード
フォントサイズ15px
monitor モード
フォントサイズ20px