Ruby 初心者スレッド Part 64
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 63
https://mevius.5ch.net/test/read.cgi/tech/1523954817/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/ 検定試験が意味ないと言ってる人は
どちらの意味で言ってるかをはっきりさせないといけない
検定試験の内容が意味がないと言っているのか、
それとも内容は意味があるが、合格証明が必要ないと言っているのかだ
大抵の人は後者である。なぜなら試験を受けなくても通る自信があるからだ
(通る自信がある=普段のプログラミングで鍛えられてる=普段のプログラミング内容が試験範囲) いや、要らんって言ってる人は多分資格ゲッターが実際に現場では役に立たなかったっていう経験則なんじゃない?
>>576で挙がってる様な資格なら一朝一夕では取れないから意味はあるだろうけど
一朝一夕で取れる資格を沢山持ってるヤツって短期記憶特化型なのか取った資格の内容まるっと忘れてるなんていうパターンが実際にあるからな 資格を取った人は勉強したから、いったん忘れても、短期間で思い出すけど、
資格を取らない人は、最初から勉強しないといけないから、無理
資格を取る人は、年に1% ぐらいだから、10年居ても、10%。
この人たちしか出世しない
勉強は競争だから、現状維持する人は、ドンドン遅れていく。
常に勉強していて、現状維持ぐらい
世の中と同じ。
努力する人が勝つ >>587
コードを書くことは手段に過ぎない
エンジニアとして出世する人は貴方のようにコードを書く仕事じゃなくてモノを作ることで目標達成に導く仕事をするのです
あなたには自分の意思を持って何かを作り上げ、顧客の事業目標の達成に貢献した経験がありますか?
自信を持ってこの問いに答えられるなら、派遣の違法面接ループから抜け出せるよ お金はね、とても寂しがり屋なんだ。
だから仲間の多いところに集まり、少ないところから居なくなるんだ。 100人会っても尖ったエンジニアに出会わないっていうのは主観が腐ってると思うけど、底辺単純業務だと腰の低いエンジニアは多いかも。 言語だけで採用される仕事は知能労働ではない
工場のライン工と本質的に何も変わらない エンジニアの人間性となんの言語やってるかは別物だろ
バカじゃないんだからそのくらいわかりそうなもんだが…… 荒らしはもう飽きたのか?
木曜日からあんなにがんばってたんだからもうすこしがんばれよ
おまえなら出来る それよりrubyの未来ってどうなっていくのか詳しいお前たちに教えてほしい
マジレスでお願い >>601
どうもならん
特にイノベーションがない限り、Rails専用言語として緩やかにフェードアウトしていくだけ アンチは自演が足りてないな
木曜日の勢いはどうした? 連休費やしてこれだけしか荒らせなかったのか?
レス稼ぎにもならんな
そんなんだから毛根が死滅するんだよ RubyのLOAD_PATHって誰がどうやって設定してるの?
ビルドするときにバイナリに埋め込まれるの? 「Ruby は国内でしか使われていない」
デマ流してるのは Matz 本人だと思った 「Rubyは死んだ」も自業自得
これまでMatzは調子こいて他言語をさんざん時代遅れ呼ばわりしてたからな
普通教祖は暴走する信者をたしなめるものなんだが…その器じゃなかったということか >>607
知らないけど、Windows, Linux 用のパスが、設定ファイルに書いてあるんじゃないの? RubyにTSみたいな構造的部分型の静的型検査が入るのいつですか?
時代の最先端行ってるはずのRubyさんなのに、今回は遅くてイライラします! >>610
Linuxといってもディストリやインストール先によって違うわけだし
書いてあるとしたらどこなんだろう? javaやったらいちいちセミコロン付けないといけないらしくてちょくちょく忘れて焦ったわ
Rubyだとあってもなくてもいい、というか使う人いないから忘れがち >>612
知らないから、推測で書くけど、
ひとまず設定ファイルか、C 言語のヘッダファイルにでも、
デフォルト値を書いておいて、各OS 用にコンパイルする
各OS では環境変数に設定すると、デフォルト値を上書きできるとか? >>614
rbenvで自分のHOME以下にインストールしたRubyのバイナリを
stringsで調べたら、自分の名前がバイナリに含まれてることを確認した。
Rubyに限らずLinux/Unix系の一般的な作法なのかもしれないけど、
参照する基本的なパスはバイナリに埋め込まれるのかなーって今思ってる。
Windowsだと一つのディレクトリに全部入れるからわかりやすいけど
Linuxだと、バイナリは/usr/bin/ruby(シンボリックリンク、実体は/usr/bin/ruby2.5)
だけど、LOAD_PATHは/usr/local/lib/site_ruby2.5.0とか/usr/lib/ruby/vendor_ruby/2.5.0とか
相対パスで決まらない場所にあちこちに散らばるから、これらのパスを書いておかないといけないはずなんだよね
最初は/etcかな?ともよくよく考えると/optとかに入れることもあるわけで、/etc決め打ちってわけにも行かない
実行バイナリからの相対パスに設定ファイルがあるようにも思えないのでやっぱりバイナリ埋め込みなのかな。
言い換えると実行バイナリを移動したりしても参照するディレクトリを変更することはできないと
rbenvのように標準とは異なるLOAD_PATHにする仕組みを作るためにはバイナリをビルドする必要があると
もちろんソースコードに直接書いてるわけじゃなくて、autoconf?とかビルドするときの--prefixとか
その他の設定によって、バイナリに埋め込まれる 原理的には、rbenv は仮想環境だから、activate すると、
~/.bashrc などで、環境変数PATH の一番前に、プロジェクトフォルダを追加して、
~/.bashrc を再読み込みする
そうやって一時的に、ruby コマンドで起動する、rubyのバージョンを変える >>616
いやいや、そうじゃなくて、そのPATHから実行されるRubyが参照する
ライブラリなんかのデフォルトの読み込みパス(LOAD_PATH)を
どうやって作り出してるかの話だよ 環境変数でないのは、環境変数を表示してみればわかるはず あと、ちなみに>>616が言ってる仕組みは間違い
> ~/.bashrc などで、環境変数PATH の一番前に、プロジェクトフォルダを追加して
プロジェクトフォルダは追加しない
> ~/.bashrc を再読み込みする
再読込が必要なのはインストール直後のみ
.bashrcに書かれるのだから次回からは不要
> そうやって一時的に、ruby コマンドで起動する、rubyのバージョンを変える
一時的に変更するオプションはあるが、通常は一時的ではない
本当の仕組みは、まずPATHの一番前にrbenvのパスが追加される。
そこにrubyコマンド等が入っている・・・ように見えて、これはただのシェルスクリプト
rubyを実行すると、まずこのrbenvのrubyシェルスクリプトが実行される。
このシェルスクリプトは設定またはプロジェクトフォルダの.ruby-versionを参照して
適切なバージョンのrubyを実行する 恒久的に、~/.bashrc に書かれていたら、マズイじゃん。
常に、環境変数PATH の一番前に、仮想環境があるってことだろ
そうじゃなくて、仮想環境を、activate した時だけ、
PATHの順番が変わるようにしないといけない
普段は、Ruby 2.3 とかを使っていて、
activate した時だけ、2.5 を使うとか お前が思ってる仕組みが間違いで
それよりももっと高度な仕組みを使ってるから
恒久的に.bashrcに実際に書かれているが
何も問題になってないんだよ
勉強不足なんだから反省してから書き込め >>620
だから、すぐ上のレスがその疑問の答えそのものだろ
変な人なのは今更だけど池沼レベルだな ruby というコマンドを入力すると、
そのシェルスクリプトが実行されて、適切なバージョンのRuby が呼び出されるのか >>615
>Rubyに限らずLinux/Unix系の一般的な作法なのかもしれないけど、
>参照する基本的なパスはバイナリに埋め込まれるのかなーって今思ってる。
一般的ではないよ
普通は埋め込むとしても ~/ だから
rbenv が糞 >>622
だから、rbenvの仕組みを理解しろって
だいたい、仮想環境とかactivateなんて言葉は使わない。
こっちはわかってるんだよ。お前がPythonの話をしてるのは
なぜ間違いを素直に認められない?
https://memo.sugyan.com/entry/20111128/1322420500
> で、この${RBENV_ROOT}/shims/rubyの中身を見てみると…
>
> #!/usr/bin/env bash
> set -e
> export RBENV_ROOT="/Users/sugyan/.rbenv"
> exec rbenv exec "${0##*/}" "$@"
> とだけ書いてある。これは同ディレクトリにあるgemやirbやrakeなども全部同じ内容。
> 結局このPATHに入っているコマンドを呼ばれた場合はすべて同じように処理される、ということになる。
>>624
お前は何を言ってるんだ?
rbenvの話とrubyの話をごっちゃにするなって Ruby | rbenv | 仕組み
http://tbpgr.hatenablog.com/entry/20131109/1384019022
> rbenvの仕組みについて
>
> shims
> unixのコマンドは$PATHを左から順に探します。
> rbenvインストール前のパスは下記のようになっています。
>
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
> rbenvはPATHの先頭にshimsを追加することで動作します。
>
> %rbenv_home%/shims
> これによりuser/local/bin等より前に%rbenv_home%/shimsでrubyの各コマンドを
> 発見することになります。
> Ruby versionの決定順序
> 1.RBENV_VERSION環境変数の内容。
> 2.実行中のscrpitファイルから探した「.ruby-version」ファイルの内容。
> 3.現在の作業ディレクトリから探した「.ruby_version」ファイルの内容。
> 4.「%rbenv_home%/version」の内容。
> Rubyのインストールパス
> 各バージョンごとのRubyは下記の用にインストールされます。
>
> %rbenv_home%/versions/1.8.7-p371/ とりあえず今度レスする時は、なんかのリンクを引用して
技術的な話をするように。
それができないから罵倒して終わるんだろうけどな。 Pythonの話が出たのでPythonを調べてみたが、やっぱり
デフォルトのパスはバイナリに埋め込まれてるみたいだな
http://hagifoo.hatenablog.com/entry/2013/07/29/132740
> 一番上まで行っても見つからない場合はコンパイル時に
> --prefix オプションで設定されたパスが使われるようです^2。
実際にpyenvを使ってユーザーディレクトリに以下に
インストールしたpythonのバイナリをstringsで調べてみたら
自分の名前が見つかった おっと、今まで「ビルド」で検索していたから見つからなかったのか
上のリンクでふと思いついて「コンパイル」で検索したらあっさり見つかった
https://docs.ruby-lang.org/ja/latest/method/Kernel/v/=2dI.html
普通にRubyのリファレンスでLOAD_PATHを調べていればすぐ答えが見つかっていたのか
予想通りライブラリのロードのパスは(設定ファイルや実行バイナリのパスなどではなく)
Linux/Unixではコンパイル時に決定するものなんだね
> $LOAD_PATH -> [String]
> Kernel.#load や Kernel.#require がファイルをロードする時に検索するディレクトリのリストを含む配列です。
>
> 起動時にはコマンドラインオプション -I で指定したディレクトリ、 環境変数 RUBYLIB の値、
> コンパイル時に指定したデフォルト値 をこの順番で含みます。
Windowsの場合も予想通りで、Rubyのインストールディレクトリから決まる(正確にはruby.dllからの相対パスらしい)
> コンパイル時のデフォルトパスは 多くの UNIX システムでは "/usr/local/lib/ruby" です。
> mswin32、mingw32、Cygwin、 bccwin32、mswince 環境では ruby.dll の位置からの相対で決まります。
> DJGPP と emx (OS/2) では ruby.exe の位置からの相対で決まります。
つーことで自己解決になったな。クソ役に立たない初心者レスばかりだった Rails の本に、すべてのヘルパーモジュールは、
すべてのテンプレート(ファイル名.html.erb)にミックスインされるので、
各ヘルパーモジュール内で定義するヘルパーメソッドを、
同じ名前にしてはいけないと書いてあるけど、
どうやって、同じ名前になるのを回避してますか? >>630
気にしないで適当でいいよ
Webなんかだいたい見えりゃいいんだからエラー出たら直せばいい そう
ウンコオンレイルズは信頼性や品質は横においといて
低学歴知恵遅れでも大量生産できるのがメリットなのに
そこをどうこういうのは間違い バイナリにパスが埋め込まれるのはpython固有の糞仕様だと思ってた。 Windowsと違って特定のディレクトリ以下に入れるわけじゃないからね。
FHSの決まりで、バイナリは/usr/bin/以下で、ライブラリは
/usr/lib以下とかに置かなきゃならないし、
ユーザーディレクトリ以下に入れるなら例えば~/bin, ~/lib 以下にしないといけない
どうにかしてバイナリとライブラリのパスを結びつける必要があるからね >>630
そもそもRailsは他人が知らないところで勝手にヘルパー追加してあぼんするような大規模な開発で使うようにはできていない
コードレベルでのコミュニケーションが取れないような規模なら適当な粒度でアプリを分けるべき Rubyの仕事したかったけど
今はRubyの業務経験がないとやれないね Railsエンジニアは飽和してるからね
ただでさえ縮小する一方のパイをゴミみたいな単価で競り合ってる状態なのに、今更未経験なんか要るわけがない 素朴な疑問なんだが、RubyアンチスレあるんだからRubyを貶したいならそっち行って書けばよくね? 俺はRubyアンチではないが、敵がいないところで
独り相撲したって意味がないだろう? >>640
ここは二人相撲するスレでもないんだが? する場所かどうかは関係ない。
できる場所かどうかだよ。
敵が多くいれば荒らすことができる。 Rails を例に出したけど、一般的に、Ruby 全体でも同じ
同名のメソッド名を避けるために、
モジュールを定義する際、モジュール内にネストして、
モジュール・クラスを定義しているのかな?
と思って 気にしない
RailsじゃないRubyなんてちょっとした書捨てスクリプトだけなんだから名前空間なんか尚更全く全然どうでもいいわ 数値の正負判定をするのに良い感じのメソッドありますか?
if文書くしかないんでしょうか >>647
Numeric#.zero?
Numeric#.nonzero?
Numeric#.positive?
Numeric#.negative? 英語ならわかりやすいって間違った考えなくならないかな
数値は数式のほうがわかりやすいんだよ。
英語がわかりにくいからこそ
数式が生まれたんだし
n > 0
短くてすぐに意味がわかる Rubyは本来的には文系文化だよ
教祖様が数学苦手だからな 数式が書きたければ書けば。
メソッドは述語的に書きたいときに使う。 >>649
メソッドにしておくと select(&::positive?) と書けるという理由だった気がする >>655
きったねえ文法だなぁw
美しい(笑)
疑似コードがそのまま動く(笑)
&::とかの意味不明な疑似コードがどこにあるってんだよwww 擬似コードがそのまま動くのはPythonじゃね
関数型言語なら演算子がそのまま第一級関数であることとカリー化を使って data |> select (> 0) みたいに書けたりするね
ガチ関数型でなくてもまともなラムダがある言語なら select(x => x > 0) と遥かに見通し良く書ける
Rubyの &:: は極めて驚きが大きく醜悪な機能の一つだね >>657
Rubyは本来アンチPerlとして産まれてるし
Perlの$とか@を排除するもんだと思ってたが
いつのまにかRubyでも@だらけそれ以上の醜さ Rubyってなんで、イコールを表すものが
== と === と eql? と equal? と4つもあるのでしょうか? >>660
まーそんなもんか、くらいにしか思わんけどな。
ただし、他言語の悪口を言い倒してなかったら、だ。
C++とPerlの恨みは忘れん。 英語の文章のようにかけるから
自由度を高めるため
etc. 英語の文章のようにかける言語は
COBOLだけで十分だ date = '2018-10-01'
day = datetime.strptime(date,'%Y-%m-%d')
'''ここは、 = date.strptime(%Y-%m-%d') でできないのは何故??'''
before_5 = day - timedelta(days=5)
print_day = datetime.strftime(before_5,'%Y-%m-%d')
'''= before_5.strftime('%Y-%m-%d')でもできる。'''
print(print_day)
strptimeとstrftime. の入力の仕方が違うのはデフォルトですか?理由などありましたらおしえてください。 LISPのeqとequalの違いと同じ意味じゃないのか >>661
coffeescriptだかjavascriptだかよりは少ない >>662
Perlは糞だが
C++はそんなに悪くない
教祖がヘイトしてくれたおかげですっかり印象操作されてしまったが・・・ >>667
JavaScriptは==と===の2つしかありませんよ >>670
isはObjectクラスのメソッドで演算子じゃない
equalsなんてものは存在しない >>665
Stringのメソッドとしてstrptimeがないから
Stringに追加するようなメソッドではないしね >>668
いや、Perlは糞じゃない。
書きにくいところがあるのはたしかだが、断じて糞ではない。
互換性の高さを評価に含めると、今でもバカにできないはず。
とはいえ、一個人が糞だと言うのであれば、それもいいだろう。感想はひとそれぞれだからな。
しかし、それによってヘイトを買い、カウンターされるリスクは当然呑ませる。
ヤツの発言をオレは忘れんぞ。 Perl5とPerl6で互換性ぶった切られたじゃん Perl6をPerlと呼んで良いのかどうかという問題が 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。 >>674
まったく別の言語だからね。しかたないね。
Perl5は今でもアップデートされてる。
ただ、互換させようともしてたはず。
Perl5スクリプトをPerl6エンジンが直接解釈できるようにして。 >>661
「ruby == === eql equal」で検索!
たいてい、Ruby では、== 、JavaScript では、=== を使う
>>665
「ruby python strptime strftime 」で検索! >>678
JAVA とJavaScriptくらい違うよね。 Windows10 で、MSYS2 を入れていないので、WebSocket gem がコンパイルできません。
どこかに、バイナリがありませんか?
Rails の日付時刻や、数字をカンマで3桁区切りにする関数などを使いたいので、
Rails のUtility 関数だけ、インストールできませんか?
WebSocket が無いので、Rails をインストールできないのです >>682
そんな不便なWindows 10なんか、さっさと捨てなさいな。 ■ このスレッドは過去ログ倉庫に格納されています