サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
obelisk.hatenablog.com
Linux その他で使おうと、Logicool のマウスを買いました。 Logicool ロジクール ワイヤレスマウス M235r ブルー 出版社/メーカー: ロジクール発売日: 2013/02/01メディア: Personal Computersこの商品を含むブログを見る ワイヤレスマウスなので、小さい受信機を USB ポートにつなげば、即使用できると思い込んでいましたが、Linux ではそんなアマイことはなかったです。マジで初期不良かと思いましたが、もしかしたらドライバが自動的にインストールされないのだと思い、ぐぐってみました。Logicool の日本語サポートを見ると、「Linux Kernel 2.6.x以降」とあるので、確かに Linux でも使えるようです。けれども、ドライバのダウンロードなど、どこにもない。というので再度ぐぐってみたところ、このような記事をみつけました。どうや
Ruby でこれはスタックオーバーフローします。 def add(n, a = 0) return a if n.zero? add(n - 1, n + a) end puts add(10000) #=>a.rb:2:in `add': stack level too deep (SystemStackError) 例えばこう対策します。 obelisk.hatenablog.com 上のとおり以前に Ruby で末尾再帰のスタックオーバーフローを避ける方法を書いたのですが、『アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで』を読んでいたら、Ruby は末尾呼び出し最適化(Tail Call Optimization)をサポートしているとの驚くべき記事があった(p.45 )。このブログ記事にも書かれている。こんな感じでやればいいようだ。 tco = <
Ruby は基本的にすべてがオブジェクトで、またすべてが「参照の値渡し」です。ただし数値とシンボルは immutable なので、「値渡し」のように振舞います。 注意すべきは文字列です。 a = "Hello" p a.object_id #=>23440680 b = a p b.object_id #=>23440680 b += ", world!" p b #=>"Hello, world!" p b.object_id #=>23440560 p a #=>"Hello" p a.object_id #=>23440680 b = a をやっていますが、b += ", world!" のところで別のオブジェクトが生成されているので、a を出力しても "Hello" になります。一見「値渡し」のようです。けれども、 a = "hello" p a #=>"hello" b = a
このページを最初にブックマークしてみませんか?
『Camera Obscura』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く