現在見ているページのmarkdown形式のリンクを生成するブックマークレット
javascript:(function(){prompt('%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84',%20%20%20%20%20'-%20['%20+%20document.title.replace(/([\[\]])/g,'\\$1')%20+%20']'%20+%20'('%20+%20location.href%20+%20')');})();
実引数側でのアスタリスク(*)の使用例メモ
- 実引数側でのアスタリスクの使用例メモ。配列オブジェクトを展開してメソッドの各引数に入れてくれる。便利。
def foo(name, val) "#{name}: #{val}" end ar = [[:a, 1], [:b, 2], [:c, 3]] ar.each do |elem| puts foo(*elem) # here end
こちらの記事のscivolaさんのコメントを参考にしました。
scopeの使い方メモ
よくググるのでメモ
scope :available, -> { where('deleted = false') } scope :available, -> { receivable.opened.showable } # 引数あり scope :find_by_friend_ids, -> friend_ids { where( target_id: friend_ids ) }
[キーワード引数] キーワード引数の使い方メモ
- よく忘れるのでキーワード引数の使い方のメモ.
- 2.1からarg1のようにキーワード引数のデフォルト引数は省略できるようになった.
def foo( arg1: , arg2: "arg2") puts "#{arg1} #{arg2}" end # 定義時に省略したarg1は呼び出し時には省略できない.(ArgumentErrorが発生する) arg2は省略できる foo(arg1: "arg1") # => arg1 arg2 foo(arg1: "a1", arg2: "a2") # => a1 a2
unknown keyword の例外を抑制する ** 引数
- キーワード引数に指定していない引数を呼び出し時に指定すると、ArgumentErrorになるが、
**引数
を指定することにより解消できる. - もしも、メソッド内で使用しない場合
**引数
の引数名は省略できる. (エラーを抑制したい時に使う?)
def foo(arg1:, **others) p arg1, others end foo( arg1: 1, arg2: 2) def bar(arg1: **) # 使わない時は省略可 end
- メソッドの呼び出し時に引数が何なのかがよくわからなくなるので、キーワード引数を積極的に使っていきたい。
参考リンク
Rubyのメタプログラミングメモ
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 end p3 = Man.new do |m| m.name ="saburo" m.age = 30 m.address = "yokohama" end puts p3 p4 = Man.new({name: "shiro", age: 33, address: "oosaka"}) puts p4
クラスマクロ
- 例外用のクラスマクロを定義した親クラスのテンプレート
class ExceptionBase < StandardError @_code def self.code(code=nil) # 引数がnilの時はgetter, nilでない時はsetterになる @_code ||= code end def code self.class.instance_variable_get("@_code") end end class NotFoundException < ExceptionBase code 404 end class ForbiddenException < ExceptionBase code 403 end p NotFoundException.code # => 404 p NotFoundException.new.code #=> 404 p ForbiddenException.code # => 403 p ForbiddenException.new.code # => 403
後で読む
空白で区切って指定したフィールドの文字を取得
$ echo "1 2 3" | cut -d " " -f3 3