2015-01-01から1年間の記事一覧

【初心者 C++er Advent Calendar 2015 ではない】C++ における const をつける位置の違い

C++

この記事は初心者 C++er Advent Calendar 2015の6日目の記事になります。 今日はクリスマス・イブ!!ってことで、せっかくなので穴が空いていた6日目の記事を書きました。 と、書いたんですが、すでにいなむさんがに先をこされていました・・・。 まぁでも…

【初心者 C++er Advent Calendar 2015 11日目】C++ における class と struct の違い

C++

この記事は初心者 C++er Advent Calendar 2015の11日目の記事になります。 今日はクリスマス・イブ!!ってことで、せっかくなので穴が空いていた11日目の記事を書きました。 クリスマスとか早く爆発してほしい さて、C言語にデータ構造を定義するための str…

【初心者 C++er Advent Calendar 2015 1日目】初心者が C++ を勉強するときに最低限押さえておいたほうがよい C++11/14 の機能

C++

この記事は初心者 C++er Advent Calendar 2015の1日目の記事になります。 本アドベントカレンダーはまだ空きがあるので気になる方は参加してみるとよいと思います。 さて、最近だと C++11/14 で書かれている本も増えてきたんですが、やっぱり昔の入門書だと…

【Ruby Advent Calendar 2015 1日目】C++er が Ruby を書いてみて驚いた10のこと

Ruby Advent Calendar 2015 とは Ruby について何か書くアドベントカレンダーになります。 現在は Qiita で開催しています。 Ruby Advent Calendar 2015 - Qiita まだ参加者は募集中なので気になる方はぜひ参加してみてください。 本題 さて、わたしは元々 C…

Ruby の #instance_eval と #instance_exec の違い

#instance_eval は渡されたブロックをレシーバのインスタンス元で実行するメソッドです。 なので例えば次のようにしてインスタンス変数をブロック内から参照する事ができます。 class X def initialize @name = "homu" end end x = X.new p x.instance_eval …

Ruby は #!= 内で #== が呼ばれる

#!= 内で #== が呼ばれているため、#== を再定義すると #!= にも影響が及びます。 [コード] class X def == other p "==" true end end X.new == "" # => true X.new != "" # => false [出力] "==" "==" #== に副作用があるとちょっと注意する必要があるかも…

Ruby でインスタンスオブジェクトに対して attr_accessor を使う

インスタンスオブジェクトに対して特異メソッドとして attr_accessor を使ってアクセッサを定義したかったので考えてみた。 class << を使って attr_accessor を呼び出すのがよいのかな? class X end x = X.new # インスタンスオブジェクトを渡す class << …

Ruby の using が refine 内だと反映されない

Refinements の refine 内では外のスコープで定義した using は反映されませんでした。 module A refine Object do def mami :mami end end end using A module B refine Class do def homu self.mami end end end using B Class.new.homu # => Error: undef…

C++ のラムダ式の引数型を推論する

C++

そういう話が Slack の C++ の会で出てたので簡単にラムダ式の引数型を取得するメタ関数を書いてみた。 #include <utility> template<typename... Args> struct parameter_pack{}; template<typename F, typename R, typename... Args> parameter_pack<Args...> args_impl(F, R(F::*f)(Args...) const); template<typename F> auto args(F f)->decltype(a</typename></args...></typename></typename...></utility>…

Ruby の attr_accessor に対して外部のスコープの変数を渡したかった

どういうことかというと次のような事がやりたかった attr = :name class X # class 外の変数を attr_accessor に渡したい attr_accessor attr end [解決] 次のように Module + #include で解決することは出来ました。 attr = :name X = Class.new.include(Mo…

初心者 C++er Advent Calendar 2015 の募集を開始しました

なんとなく勢いで立てました。 初心者 C++er Advent Calendar 2015 - Adventar 初心者のためのゆるふわなアドベントカレンダーになります。 興味のある人は参加してみてくださいー。 ちなみにガチなネタを書きたい方は別のアドベントカレンダーもあるのでそ…

Qiita で Ruby Advent Calendar 2015 つくった

なかったのでつくった。 Ruby Advent Calendar 2015 - Qiita さすがに1人じゃ寂しいので気になる方は参加してみてください。

Ruby でシェルの単語で分割する

Ruby で文字列からシェルの単語で分割する場合、'' や "" なんかを考慮する必要があり、単にスペースで split するだけでは対応できません。 そういう時には shellwords モジュールの Shellwords.split が利用できます。 require "shellwords" Shellwords.sp…

C++03 で has_xxx の実装

C++

久々に書いてみたら全然書き方覚えてなかったので覚書。 template<typename T> struct sfinae_helper{ typedef void type; }; template<typename T, typename U = void> struct has_xxx{ static bool const value = false; }; template<typename T> struct has_xxx<T, typename sfinae_helper<typename T::xxx>::type>{ static bool const value = tru…</t,></typename></typename></typename>

Ruby の ` メソッド

昨日、Ruby の単項演算子について調べていたんですが、` という演算子があったので調べてみました。 そもそも Ruby の ` は『シェルコマンドを実行する手段』ぐらいしか知らなかったんですが、これって Kernel のメソッドだったんですね…。 module function …

Ruby で使用できる単項演算子

Ruby で使用できる単項演算子を調べてみた。 Ruby では +, -, ~, ! が単項演算子と使用でき、さらに再定義することもできます。 [コード] class X def +@ p "+" end def -@ p "-" end def ~ p "~" end def ! p "!" end end def ` str p str end x = X.new +x…

C++ の会に参加している

最近、主に Slack で活動してる C++ の会に参加してみました。 主に Slack で雑談でしてるだけなんですが、興味のある方はこちらから登録してください。 アクティブユーザが少なくて寂しい。

Ubuntu で nokogiri をインストールする

nokogiri をインストールしようとしたらエラーになったので対処方法を覚書。 gem から nokogiri をインストールしようとしたら以下のようにエラーになりました。 $ sudo gem install nokogiri Building native extensions. This could take a while... ERROR…

公開用の Slack で招待フォーラムを用意する

最近、某 Slack に参加しているんですが、『参加するのにいちいちメルアド聞くのがめんどくさいよねー』ということ以下のサイトを参考にして招待用のフォーラムをつくりました。 公開Slack用 自動招待フォーム by GAS - Qiita GoogleApps を使っているのでこ…

Ubuntu に Ruby2.2 をインストールする

Ruby2.2 をインストールしたかったので調べてみた。 基本的には以下のサイトのようにPPAパッケージを使用すれば問題ない。 PPAパッケージを利用してRuby 2.2をUbuntu 14.04にインストールする | hrendoh's memohrendoh's memo [Ruby2.2 のインストール] $ su…

Ruby で Object#instance_variable_set 等を使うときの注意

Ruby では Object#instance_variable_set を使用することで任意の名前のインスタンス変数に値を設定することができます。 class X attr_reader :name end x = X.new # @ + 変数名を渡す x.instance_variable_set(:@name, "homu") x.name # => name Object#in…

gem でインストールしようとしたら "Marshal data too short" とエラーになった

gem で mechanize をインストールしようとしたらエラーになった。 $ sudo gem install mechanize ERROR: While executing gem ... (ArgumentError) marshal data too short [解決] ~/.gem/ を削除したら解決した。 エラーになっていた理由はいまいちわからず…

Ruby 2.2 の Method#super_method

Ruby 2.2 で追加された Method#super_method を使用するとスーパークラスのメソッドを呼び出します。 class Super def homu "homu" end end class Sub < Super def homu "homuhomu" end end x = Sub.new # スーパークラスのメソッドを呼び出す x.method(:hom…

Ruby でサブクラスからスーパークラスのメソッドを明示的に呼び出す

Ruby でサブクラスで上書きしたスーパークラスのメソッドを super を使う以外で呼び出したい場合、Method#bind を使用します。 class Super def homu "homu" end end class Sub < Super def homu "homuhomu" end end x = Sub.new x.homu # => "homuhomu" # …

Vim で , の後にスペースを自動で挿入する

Vim

,の後にスペース自動入力して欲しいです— Tsuzu (@Wp120_3238) 2015, 10月 22 lexima.vim でやってみた。 " ,の後にスペースを入れる call lexima#add_rule({ \ "at" : '\%#', \ "char" : ",", \ "input" : ",<Space>", \}) " ", " の後にスペースを続けれないよう</space>…

Vim script で数値、文字及び文字列リテラルを使わないで Hello World を出力

Vim

標準出力に Hello World と出力する Vim script を作成して下さい。ただし、数値、文字及び文字列リテラルを解答に含めることはできません。— mattn (@mattn_jp) 2015, 10月 17 と、いうことでやってみた。 let D = {} let D.Hello = {} let http://D.World …

Ruby でクラスが継承したクラスや include したモジュールの優先順位を調べる

クラスが継承したクラスや include したモジュールの優先順位は Module#ancestors で調べることができます。 module IncludedModule end module PrependedModule end class Super end class X < Super include IncludedModule prepend PrependedModule end X…

Ruby でクラスが継承したクラスや include したモジュールの優先順位を調べる

クラスが継承したクラスや include したモジュールの優先順位は Module#ancestors で調べることができます。 module IncludedModule end module PrependedModule end class Super end class X < Super include IncludedModule prepend PrependedModule end X…

Ruby で include と継承した場合の super の優先順位

include と継承した場合、どちらが優先的に調べるのか試してみた。 [コード] module M def homu p "M#homu" end end class Base def homu p "Base#homu" end end class X < Base include M def homu p "X#homu" super end end X.new.homu [出力] "X#homu" "M…

Ruby で include した module のメソッドを呼ぶ

継承したクラスのメソッドと同じように super で呼び出すことができます。 [コード] module M def homu p "M#homu" end end class X include M def homu p "X#homu" # include した同名のメソッドを呼ぶ super end end X.new.homu [出力] "X#homu" "M#homu"