Ruby 初心者スレッド Part 60 [無断転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 59
http://echo.2ch.net/test/read.cgi/tech/1475394638/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/ >>848
俺が思ってる事に勝手に限定してんじゃねえよ
Perlが標榜するものの一部だろうが
それに人間性に問題があるのか知性に問題があるのか知らねえけど、
Perl6ならオブジェクト指向プログラミングが可能だし変数を型で縛れるぞ >>850
俺は一度Ruby-1.6シリーズを触ったけどその時は合わなくてPerlに行った
PerlでCGIゲームを書いたけど結局1年半でRubyに流れ着いた
その時はRuby-1.8.1か2になってたかな
それからは個人利用だとRubyが中心になってる
決定的となったのはRuby Hacking Guideの存在だったな
Web版で済ませましたスンマセン Rubyが動的言語なのは必然
何も分かってない
影響を受けたPerl、Lisp、Smalltalkが動的言語
利用形態が近いLAMPのP言語のPerl、Python、PHPが動的言語 >>852
>Ruby Hacking Guide
これって、今でもWeb版が閲覧できね。
知らんかった。 Win7(32bit)上のRubyInstaller2からwin32oleを使ってデータベースに接続しようとしてるんだけど
ODBCデータソースのOpenで例外が出てしまう。
エラーメッセージは↓
システムエラーコード126 指定されたモジュールが見つかりません (〜)
カッコ内はODBCドライバのフルパスが書かれているけどファイルは間違いなくそこにある。
試しにActiveScriptRubyでやってみたらうまく繋がる。
これってどんな原因が考えられるでしょうか? >>853
ダメなものの真似する意味あるの?
Pythonは動的型にしたおかげで苦しんだよね >>855
不確かな答えになるけど
ODBCドライバが依存しているライブラリが読み込めないから?
環境変数のPATHを確認してみると違いがあるのかな
ruby -e 'p ENV["PATH"]'
あとはActionScriptRubyのruby.exeがあるディレクトリに移動してRubyInstaller2のruby.exeを起動してみるとか >>857の追記
ググったらかなりの数がヒットしたから解決できるかもよ
https://www.google.com/search?q=ODBC+システムエラーコード126+指定されたモジュールが見つかりません 今現在も苦しんでる途中といってよいんじゃないかな
初めから静的型を導入してれば何でもなかったのにな
Pythonのこの様子をみてmarzは
Rubyに静的型を入れるのを止めたわけで
どのみち行くも留まるも地獄
初めから静的型にしておくのが正解だったわけだな
動的型っていったい何のために有るんだろうな
開発速度も実行速度も遅いんじゃ意味わからないよな
処理系を用意するのが楽ってこと以外はメリットが見当たらない JSも非常に苦労が絶えないよね
まず使いにくいから静的型のTypeScriptとか作られたり
ブラウザのJSエンジンも速度上げるためにキチガイじみたことやってるよね
なしてこんなことにって感じ
動的型って世の中を混乱させて無駄なエネルギーを使わすために有るんかね スレが伸びてると思ったらまた例の粘着荒しか
こんなのを生み出したこいつの親に製造責任とって欲しいよ、ホント
win32oleの話題が出てるけど、
ファイルダイアログ扱うCOMってOSのメインバージョン、xpとかvistaとか7とか違っていても共通でいけるの?
それともメインバージョン毎に異なるCOM使わないといけないの? >>865
TypeScriptって凄い名前でしょ
なんたって「Type」Scriptだもんな
言いたいことが名前に表れてる
何に対するアンチテーゼなのか明確
これが今後の常識 >>855
"mfc71.dll"、"msvcp71.dll"、"msvcr71.dll"の3つのファイルを入手してOSのシステムディレクトリ"c:¥windows¥system32"に保存すればよい。 VC++ 2010(32bit版)、VC++ 2012(32bit版、64bit版)、VC++2013(32bit版、64bit版)の計5つのランタイムの内、1つをinstallすれば解決できるかも。
まあ、この手のエラーは、ランタイム地獄とか、DLL Hellとかで検索! プログラム初心者がrubyを1から学ぶ上でおすすめの本とおすすめのサイト・ブログを教えてほしいです。
ちなみにルビィの冒険はすでに持ってます。
というかルビィの冒険を読んで興味持ちました。 ルビィの冒険
↓
はじめてのRuby
↓
パーフェクトRuby
↓
Rubyベストプラクティス
EffectiveRuby
メタプログラミングRuby1版or2版
Rubyによるデザインパターン
↓
リファクタリングRubyエディション
Rubyのしくみ。
ウェブアプリ方面
パーフェクトRubyonRails
RubyonRails5アプリケーション・プログラミング
Docker教科書
JapaScript本格入門第二版
入門Git
GitHub実践入門
SQL 第2版 ゼロからはじめるデータベース操作
達人に学ぶ SQL徹底指南書
SQLアンチパターン >>870
沢山ありがとうございます!
ちなみに発売日が古い本でも問題はないでしょうか?
昔と今との変更点とかで >>872
残念ながら大有り
そこに気づけただけでも君はバカではないようだ >>872
基礎的なことを学んでいくなら問題はない、
しかしJavaScript等は最近大幅なテコ入れがあった。
だから不安なら、ここ最近1年以内の本を買ったほうがいい。
またそもそも基礎的な事、基本的な事なら10年以内の本でも
名著であり続ける。だがその数は少ない。 Rubyの言語仕様をある程度覚えたら、
次にリファクタリングRubyエディションを読むと良い
コードの最も筋の良い書き進め方を会得できるし、一般的なプログラミング作法の本質を学べる
コードをバリバリ書けるようになるし、Rubyを便利に使いこなす理解も深まる ary = ["a", "b"]
ary[0] = ary[0] + "x"
puts ary[0] #=> ax
ary[1] =+ "y"
puts ary[1] #=> y
上なら、文字列が連結されて、
下なら、b が消えて、上書きになるのは、なぜ?
文字列の、=+ 演算子は意味が異なるの? ary = ["a", "b"]
ary[0] = ary[0] + "x"
# ary[1] =+ "y"
ary[1] += "y"
puts ary
表示
ax
by
自己レス
+= だったか。
=+ と逆に書いていたw
でも、コンパイルエラーが出ない よっぽど仮想学習的な環境でない限りNoMethodErrorが出るよ
irb> a = %w(a b)
irb> a[1] =+ "y"
NoMethodError: undefined method `+@' for "y":String paiza.IO で実行したけど、コンパイルエラーにならなかった >>881
paizaは2.4系だから。あと細かいけど、インタプリタだからコンパイルエラーと呼ぶのは違う気がする 文字列のimmutable化による変更のひとつとして、Stringクラスに単項演算子+、-が追加されてる。
ttp://qiita.com/iwamot/items/2ddf8de09d5dbcad2df9
こういう事情らしい。
http://d.hatena.ne.jp/ku-ma-me/touch/20151004
Rubyはやっぱりクソ。互換性に対する配慮が甘い。 >>882
言いたいことはわかるが、コンパイルエラーでも問題ないと思う。
実行前の文法エラーなのであれば、あきらかに事前のコンパイル段階のエラーなんだから。 あ、>>884に追記。
インタプリタどうこうの点についてのつもりなので、念のため。
881がコンパイルエラーといってるのはおかしいと思うよ。 >>883
誰かと思えば遠藤さんか
それなら説得力あるな >>883
+@, -@の追加は別にいいけど3.0以降のデフォルトimmutable化はさすがに勘弁して欲しいなあ、Railsの声が強すぎる……
>>884
RubyのNoMethodError(というかException全般)は実行を試みて初めて出されるから実行時のエラーだよ。(ランタイムエラーと呼びたいがRuntimeErrorクラスと混同しかねないので悩ましい)
endが足りないとかのSyntax Errorとは別物だと思うけど。こっちは実行前の構文解析。 >3.0以降のデフォルトimmutable化
定数は自動的にfreezeするくらいの対応で良かったな Rails(無理)が通ればRuby(道理)が引っ込む Railsさんを追い出したら島根のお役所へのPRに使えるようなRuby採用事例がほとんど無くなって金貰えなくなるからね
Chefみたいなインフラ系の事例を出されても役所の人「ハァ?」だろうし RoR上でのみデフォルトでimmutable、ってのも立派な"Rail"じゃないのかなあ。
どうせマジックコメントで切り替えられるようにするんだったらわざわざRuby全体のデフォルトを変えんでもいいでしょうに…… >>892
よくねーよ
Rubyで作れるのは
Webアプリだけじゃねーから
Railsみたいなフレームワークを
言語仕様にしちゃうと窮屈になる >>895
他に何に使われていようが、金を産んでるのもMRIにコミットしてる開発者が作ってるのも事実上Webアプリだけだから
他は無視しても全く問題ないのよ、残念なことに >>896
そんな発想だから
機械学習とかWeb以外の
ライブラリが充実してるPythonに
国際的に負けてしまう >>895
知らんよ
RailsがRailsで何を作ろうが関知するものではない Rubyが、ドンドン、Elixir に近づいていく
>>887
そう言えば、「メタプログラミング Ruby」にも、
NoMethodError を上書きするな、って言う格言があった これも結局速度のために手動で変な最適化をプログラマに課してるだけのことだよな
こーゆーノリはC言語時代にはよくあったと思うけど
なんせ当時のCPUは今から考えるとものすごく遅かったからなぁ
だけど今時だとCPUも速いしコンパイラの最適化も凄いから
特に何も考えなくても十分に速いので、変な最適化に技巧を凝らすより
読みやすいコード書けってのが主流だよな
だけどRubyはメジャー言語より平気で50倍とか遅いし
コンパイラの最適化も糞なので手動で最適化するんだなwww
3.0GHzの最新CPUを使ってても50〜100MHzのCPU相当の速度になるし
加えてコンパイラの最適化も糞で手動で最適化とか
まるで20年ぐらい前の感じだな
動的型でプログラミングが楽になるはずが
静的な型チェックもなければ速度が遅くて手動で最適化とか
本当に動的型は素晴らしいですね スクリプトで手間暇かけて凝ったアルゴリズムで計算量減らすより
C++でブルートフォースしちゃった方がてっとり早くて速かったりするのはよくある話
スクリプト向きのタスクか否かを感覚的に見抜けることは大切 今もう2017年だよな
Rubyはこんな最適化のために
今更言語仕様を変えるだとか変えないとかで盛り上がってて
何なんだろうな
これから先もずっとこんな調子なのかね
元の実行速度が遅いから速くするための最適化のために言語仕様をどうのこうの
今はforループを自動で並列展開してマルチスレッドとかSIMDとかで
コンパイラに頑張ってもらって速度を稼ごうとか
そういうこと言ってる時代なのに
やってることがあまりにも原始的というかなんというか
技術的に何も面白くないし、触ってて本当に楽しいんだろうか?
よく考えられた静的型のシステムがあるわけでもないし
化石言語だな
ありとあらゆることをプログラマに丸投げ ありとあらゆることが悪い方に作用している様は本当にすごいよ
動的型のおかげでそもそも遅そうなのにろくに最適化もかからないから鈍足
遅すぎるのでプログラマが手動で最適化してください
加えて静的な型チェックもしないのでテストするなりなんなり
プログラマが頑張ってください
動的型って何なんだろうね 専ブラを使っている人は次の正規表現をNGIDとして突っ込んでおきましょう
\b(ppLsekVC|qMkdrUOQ|IBgoqo2I|AOJFjP\+S|bC2KM4MS|Wy5AX0em|m8GLf68F|hEgnFYnk|HGihyxQL|PA7iDDOj)\b ワッチョイじゃないからあんまり意味ないんだよなぁ
1行読んで心のNGフィルターに突っ込んでるから問題ないけど ま〜た涌いてるのか
はよー親に製造責任とってもらえよ 趣味で作られた「オレ様の考える最強言語」にちょっと高望みしすぎじゃないの とか言っちゃダメかな 初心者スレで暴れまわって機能不全に陥れるとは
Rubyは完全に澱んでるな
Pythonコミュニティとすっかり差が開いてしまった
人気ランキング1位
Pythonは今のうちに習得すべき?『スラスラわかるPython』著者・岩崎さんとPyCon JP理事の寺田さんが語る:CodeZine(コードジン)
http://codezine.jp/article/detail/10329 >>908
いわゆるスクリプト言語の多くがそうなんだよなあ。 コマンドライン引数が表示できません。
OSはwin10、rubyのバージョンは2.4.1-2-x64です。
コードはprint_arg_1.rbという名前で、
#!c:/ruby/bin/ruby
print ARGV[0]
コマンドプロンプトには
c:\ruby\samples>print_arg_1.rb A
と入れてみるのですが、何も(エラーも)表示されません。
Aと表示させるつもりなのですが・・・。
ちなみに、powershellに入力した場合はAと表示できます。 c:\ruby\samples>print_arg_1.rb A
のAの前のスペースが全角だからじゃね >>912
すいません、そこは半角でした
半角で入れてみても、うまくいきません >>913
ruby -e "p ARGV[0]" A
ってやったら
"A"
って出力される? ruby hoge.rb A
頭にrubyをつけてみては >>915
コードを
#!c:/ruby/bin/ruby
p ARGV[0]
と書き換えるということですか?
やってみたところ、nilとでました >>917
.\print_arg_1.rb A
と入力しました。
"A"と出力されます。 コマンドプロンプトからwhere ruby
多分rubyがバッチファイル 以下、そういうときの正確な状況を確認する方法。
次のコマンドラインを実行して、関連付けを確認。
assoc .rb
その出力結果を引数にしてftypeを実行して、実行されるコマンドラインを確認。 powershellで実行してるものと、コマンドプロンプトで実行してるものが別ファイルである可能性くらいしか無いのでは rubyでOpenglいじってるけどコード書き換えやすくて楽しすぎ
他にも楽しそうなもの無い? Sequel4でSQL server上の日本語てんこ盛りのテーブルに接続できるか試しているんですが
日本語以前にシンボルを使ったアクセスだと全部upcaseされているっぽくて
大文字小文字混在の識別名?が指定できなくて詰んでます。
これどこで設定すればいいんでしょうか? .\print_arg_1.rb A
.\ は、カレントフォルダだから、相対パス付き
c:\ で始まっていたら、絶対パス
print_arg_1.rb A
これは、パスではない。
print_arg_1.rb というコマンドになるから、そんなコマンドは存在しない
基本は、実行したいスクリプトファイルのあるフォルダへ、
cd で移動して、そのフォルダで、.\ を付けて、
.\print_arg_1.rb A
とする
#!c:/ruby/bin/ruby
Windows でも、シバンが使えるのか。
パス区切り文字は、/ でも認識できるのか rbのファイルタイプを常に
ruby.exeで開くように設定したんだろう
そのときにたぶん"%1"ぐらいは設定されてるのだろうけど pythonのインストーラーが尋ねる2通りの選択
pathに設定するかwindowsシステムにアプリケーションを登録(推奨)みたいなやつがあって謎だったが
今意味が分かった 環境変数PATH をいじくったら,
すべてのコマンドの起動に影響するから、大変 WindowsでのRubyプログラムで
一番大変なのは環境構築だからな
環境変数がどうこうはよく調べておくように pyenv, rbenv など、仮想環境を使うと、
環境変数PATH の先頭に追加するから、極めて危険
〜python2
〜python3;〜python2
例えば、python コマンドの実行ファイルが、
〜python2 ではなく、先に、〜python3 のパスで見つかるから
そのコマンドが、どの実行ファイルを起動しているのか、くれぐれも注意せよ ruby って -K で文字コード指定して実行出来るみたいだけど
バージョン指定して実行するようなオプションってあったっけ version指定というか、ruby処理系を指定しての実行なら可能なはず
上ででてきた#!c:/ruby/bin/rubyを応用して、
version毎にディレクトリ作ってパス指定 突き止めました
エクステンションを導入して変換を無効化すればよかったです。
DB.extension :identifier_mangling
DB.identifier_input_method = nil
DB.identifier_output_method = nil 間抜けなことしてました。
ODBC使うのにsequelが自前でやってると思ったらruby-odbc使ってた。
だからodbc-utf8を先にrequireしないとutf8が通らなくて日本語以前だった。
ほかにもfreeTDSでutf-8だと指定効かないとか気がつかなかった。
bundlerが依存関係全部処理してたから気がつかなかった… ありがと。
さらに問題発覚。というかsequelの手抜きなんだけど
likeを発行するときにsql server向けの互換レイヤはLatin1_General_*を強制的に付け足す。
ハードコードされてて切り替えできない。とりあえずlib/sequel/adapters/shared/mssql.rbにパッチ当てたけど
gitみてもこの辺対処されて無いっぽい。5になれば期待できそうな感じはあるけど。
あーやっとやっつけ集計バッチをこれで置換できるかもしれん
あとはsinatraとhamlとsassか… いろいろいじった結果
FreeBSD 11.1R
ruby 2.4.0
sequel 4.48.0
ruby-odbc 0.99998
unixODBC 2.3.4
freeTDS 1.00.131,1
Microsoft SQL Server 2008 R2
の組み合わせで日本語てんこ盛りのデータベースを読むは問題なさそう。作ったり書いたりはこれからだけど基本集計だけだし。
結局utf8周りの設定は一切合切消してもrequire 'odbc-utf8'があれば普通に日本語通ってしまった。
数年前に試したときにうまくいかなかったのも多分これのせいだったんだろう。 そういば、1.8かどうか忘れたけど、
Arrayの派生クラス同士に+をつかって、新しい派生クラスのインスタンス出力しようとしたら、
派生元のArrayのインスタンスが出力されることがあったな
長い間気づかずどつぼにハマッてたのを思いだした Arrayの派生クラス同士に
↓
Arrayの派生クラスのインスタンス同士に たいがいの言語でそうなっちゃうでしょ。
まあしかたないね。 >たいがいの言語でそうなっちゃうでしょ。
そんなことないよ
静的型だったならどこかでコンパイルエラーになって気づけた可能性もあるよ まーた涌きやがったかコイツ
まぁRubyだからこそ直接Arrayクラスのメソッドをself.classをつかったコードに書きえて、
派生先のクラスでも問題なく動かすようにできるわけだけど
当時もそうやって楽に対応できたし、今のverなら書き換える必要も無く対応してるんじゃないか?
確認してないけど このような実例があると
動的型にすると無駄な時間が増えることが
初心者にも分かりやすくてよいですね 普通、配列のような基本的なクラスからは、クラスを派生させない
継承を使うのは、自分で作ったクラスか、
継承されることが前提のクラスだけ
一般的には、継承より包含を使う
包含の方が、継承よりも柔軟だから、
配列のような基本的なクラスには、合っている レス数が950を超えています。1000を超えると書き込みができなくなります。