Ruby 初心者スレッド Part 62
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 61
https://mevius.5ch.net/test/read.cgi/tech/1503644351/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/ ruby -e "puts 'abc'"
ruby -e 'puts "abc"'
1-liner で、上はWindows、下はLinux でのクォーテーションだけど、
簡単に相互を置換する方法はない?
ruby -e "puts 'abc'"
例えば、これの、" を' に置換すると、
ruby -e 'puts 'abc''
となって、区別できなくなる
>>749
もちろん、Rails >>748
Ruby関係ない
純粋にJavaScriptやHTML5の話 >>750
WindowsだろうがLinuxだろうがワンライナーならどちらのクォーテーション・マークでも動作するから置換する必要はない
それでも置換するなら、簡単なものなら..tr('"\'','\'"')
真面目にやるなら式中の"を%Qに'を%qにでもすればいいんじゃない Array#zipに関する質問です。
aを二次元座標[x, y]の配列として
a[0].zip(*a[1..-1])と同じ動作を効率的にできるだけ短く書くコードを教えてください。 >>753
そんなところをハックしてもパフォーマンスは一ミリも改善しません
速くしたいなら他の言語を使うか、SQLをチューニングましょう aの要素数が滅茶苦茶多いと、引数に渡すだけで大変そう 速いかは知らないけど
a.transposeでいいんじゃないの >>757
transposeなんてメソッド存在していたとは……知らなかった。
というかriのArray#zipで言及して欲しい。 よく使うクラスだけでもマニュアル全部読んでおくといいよ大した量じゃないし 普通は、transpose ぐらいあるだろ。
R なんて、行列が逆だから、transpose が無かったら、混乱する
module Enumerable だけは、読んでおけ Windows10 の、Chrome の自動操作で、
SeleniumWebDriver では、Ruby から起動したブラウザが、閉じてしまう。
sleep で、待つ事はできるけど
ブラウザが閉じないように、出来ないの?
それか、iMacros を使うしかないのか? ActiveRuby (Beta 版)と言う、Rails など、40 gem、有用なライブラリ一式をまとめた、
Windows 用の、Precompiled Ruby があるね
Ruby 2.3.4 で、容量は、1GB RubyのClassクラスはObjectクラスのインスタンス。
そんでもって、自作MyClassクラスを作れば、Classクラスのインスタンスとなる。同時に、Objectクラスを継承する。
ってことは、Objectのインスタンスメソッド、ClassのインスタンスメソッドをMyClassのインスタンスは継承している。 Classクラスのクラスメソッドは、
自作MyClassクラスのクラスメソッドとなるか? Classクラスの特異クラスのインスタンスメソッドは、
自作MyClassクラスのクラスメソッドとなるか? オブジェクトの特異クラスのメソッドは、
そのオブジェクトの特異メソッドとなる。
では、オブジェクトの特異クラスのそのまた特異クラスのメソッドは、
そのオブジェクトの特異クラスメソッドとなるか? ご覧ください。
こういう処理すべき本質と離れた下らないことしか話すことのないクソ言語とハエ信者たちです。 ご覧ください
こういうプログラミングの話題でない煽りしかできない底辺です >>772 に言わせれば:
・以下の記事の内容は「処理すべき本質と離れた下らないこと」であり、
・以下の記事に登場するのは「クソ言語」であり、
・以下の記事の著者は「ハエ信者」なんだろね
Pythonのオブジェクトとクラスのビジュアルガイド – 全てがオブジェクトであるということ
http://postd.cc/pythons-objects-and-classes-a-visual-guide/ pythonごときクソ言語に劣等感抱いててワロタwww
追い詰められ過ぎwww消えそうwwwww Ruby にも、アルゴリズム・数学系のライブラリが揃っていれば、
蛇には負けぬものを。ぐぬぬぬぬ
実際、プログラミングコンテスト・パズル系は、Rubyで説明することが多いのに numbers = (1..7).to_a
この配列を、前から走査して、ある数字が見つかった時、
その数字より前の配列と、その数字を含めて、その数字より後ろの配列に、
1-pass で分ける、簡潔な書き方はありますか?
partition, group_by, each_with_object とか?
例、4 が見つかった場合
[1,2,3]
[4,5,6,7] 元の配列に4が1つしかなくてソート済みならpartitionでいいんじゃない
numbers.partition{|e| e < 4}
そうじゃないなら素直にやるしかないかと
i = numbsers.find_index(4)
numbers[0...i]
numbers[i..-1]
もしくは
numbers.take_while{|e|e != 4}
numbers.drop_while{|e|e != 4} SASS, HAML, Markdown とか、皆どれを使っているの?
>>783
ありがとう。素直にやるしかないですか [1, 2, 3, 4, 5, 6, 7].slice_before(4).to_a
=> [[1, 2, 3], [4, 5, 6, 7]]
(to_aはEnumeratorをそのまま使うようにすれば不要) これからRuby on RAILS勉強するんですけど
なんかいい参考書とかHPありますか? >>787
(1..7).slice_before(4).to_a
=> [[1, 2, 3], [4, 5, 6, 7]]
[1,2,4,5,4,6].slice_before(4).to_a
=> [[1, 2], [4, 5], [4, 6]]
slice_before だと、探している数字が複数回あると、
そこから新たに、グルーピングが始まる
>>788
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
実践Ruby on Rails 4: 現場のプロから学ぶ本格Webプログラミング、黒田努、2014
黒田の本は、わかりやすい。
ただし、他の著者で、Rails 5 の本も出ているかも > slice_before だと、探している数字が複数回あると、
> そこから新たに、グルーピングが始まる
仕様どおりだろ erbとかのテンプレートを元に画像を生成するgemってありませんか?
thinreportsでpdfではなくbmp,pngなどの画像を出力する感じです 「selenium webdriver screenshot」で検索!
Electron でも出来る >>784
AsciiDoc/Asciidoctor シェルコマンドでimagemagick呼べばいいよ
gemすら使わずに一瞬でできる TSVデータを処理したいんですが
末尾の空白文字(タブ)がいつの間にか消えてしまいます
splitが自動削除するのは分かったけど他でも消えてる様です
この暗黙の空白削除現象を検索しても引っかからないんですがいい検索単語はないですか?
あと勝手に削除する理由はなんなんでしょう 原因分からなかったけど解決しました
ループ内で毎回Hashに加えていくのを一旦stringにまとめてから
ループ後のHashに加えるようにしたら"\txxxxx\t\n"の後ろのタブが消えなくなりました windows環境でrRubyinstaller2でインストールしてruby.exeのパスに非アスキー文字が含まれていると
requireしたときに$LOAD_PATHの非アスキー部分が文字化けしてload errorが起きるんですけど何か対処法はありませんでしょうか?
その場的に今はUTF-8で書いたコードの中で$LOAD_PATHに対応するパスを挿入して動かしてるんですが。。。
諸事情によりrubyはアスキー文字配下にインストールできないものとします Windows のirb でも、ascii 以外は正常に動かないから、
irb を使う時だけ、WSL・Ubuntu の方を使っている
UTF-8 では、cp932(shift-jis)が読めないのだろう
起動時オプションで、cp932 を指定すれば、読めるかも知れないけど、
逆にRuby 内部で、cp932 はヤバイのじゃないか?
UTF-8以外を使うと、他のアプリと通信できないとか、バグりそう
とにかく、PC のユーザー名・パス名などに、半角英数字以外を使うと、
多くのアプリでバグる Windows のPowerShell から、Ruby の1-liner を実行すると、ファイル名だけが\x 表示された。
PowerShellのデフォルト文字コードが、UTF-8 だから、フォルダ名は正常に表示された
> ruby -rfileutils -e "puts FileUtils.pwd"
C:/Users/Owner/Documents/あいう
> ruby -e "p Dir.glob('*')"
["\x{8345}\x{8343}\x{838B}\x{8358}.txt", "\x{8376}\x{838D}\x{834F}\x{838C}.txt"]
> ruby -E :shift_jis -e "p Dir.glob('*')"
起動オプションに、外部エンコーディングをUTF-8のままで指定せず、
内部エンコーディングだけをshift_jis に指定すると、正常に表示された
["ウイルス.txt", "プログレ.txt"]
漏れは一々、起動時やファイル内に、文字コードを指定するのが面倒なので、
Windowsのユーザー環境変数に、RUBYOPT を追加して、--encoding=UTF-8 を設定している。
ただし、こうすると、irb が動かなくなるので、Windows10 のWSL・Ubuntu のirb を使っている
一方、WSL・Ubuntu・bash から、上記を実行すると、
デフォルトで、どちらも正常に表示された
Windows で実行する場合は、PowerShellはUTF-8、コマンドプロンプトはCP932 がデフォルトだから、
これらのシェルの文字コードか、Ruby側の文字コードを指定する
まあ、shift_jis の処理は、危険だと思う。
@などのWindows独自のCP932文字(環境依存文字)があって、
shift_jis・CP932は微妙に異なるから、どこまで正常に動くか分からない なにをごちゃごちゃやってんだ?
こういうのは変換すべきレイヤーで変換するだけの話だろ
Rubyのスクリプト(に限らないが)は
どこでも同じように動かすんだから
ソースコードも内部も UTF-8だ
画面への入出力時に変換させればいいだけ
コマンドプロンプトをUTF-8に変換するって手もある
海外じゃCP932という日本専用の文字コード使ってないことぐらいわかるだろ? 元々はwindowsのワイド文字をうまくutf8に変換してやってこうという方針だったのに
nobuがロケールに変換させまくって動かないだけ
まあ誰もバグ報告しないのも悪いけど Rubyist は、RubyでGem を作れるけど、C で低レベルなI/O を書けるわけじゃない
また、Linux・Windows の両方に対応させるのは、難しい library irb/input-method
https://docs.ruby-lang.org/ja/latest/library/irb=2finput=2dmethod.html
class IRB::ReadlineInputMethod のソースコードを見れば良いの?
それとも、GNU Readline のソースコードかな?
Windows のirb で、日本語がバグるのは、
根本的に、GNU Readline が、Windowsの日本語を考慮していないからじゃないの? というかrubyコミュニティがwindowsを考慮してない。
むしろ怨み、蔑み、嫌っている。昔から。 console.log("あ");
Windows で、node (REPL)を実行したけど、
日本語を入力しても、PowerShell・コマンドプロンプトの両方で、正常に動く RubyはLinuxで動かすようにすればいいよ
WindowsでちょこっとしたやりたいことがあるならC#使え、と
どうせ仕事でやってるRubyはLinuxで動くんだからさ
Windowsマシンでの開発ならVMかDocker使えばすべて解決 ありがとうございました
ググってみたら結構前から報告されていたバグみたいなので諦めることにします >>800
$LOAD_PATHをforce_encoding()で環境に適応したエンコーディングを設定したら?
あるいは、バイナリに設定して、むりやりそれっぽいバイトデータをつっこむとか? >>808
chcp 65001とかしてもダメかね? cmd で chcp 65001 するくらいなら
git for windows インスコして git bash (mintty) 使うと幸せになれるぞ Ruby の起動オプションに、外部・内部エンコーディングか、RUBYOPT で指定できる。
ファイル内でも指定できる
それと、PowerShell・コマンドプロンプト、WSL・Ubuntu・bash で指定できる
これらの組み合わせの中で、文字化けしない組み合わせを探す
または、$LOAD_PATH の辺りで、指定するとか Rubyの2.5.0p2をRubyインストーラーでインストールしたらRubyの2.5.0p0だった・・・ そうそう。結局 Rubyやirb に問題が有るんじゃなくて
単に >>803 が理解してないだけ そういうことだから理解できない初心者は間違ってもrubyなんか使おうと思わないようにね。
初心者や子供にruby勧めてくるのは例外なくマウント取りたいだけのクズだぞ。 書籍のサンプルコードの一部です
この@memoという変数はいわゆる辞書形式のデータ構造で
[remain, pre]は辞書のキー(複合キー?)という理解でいいんでしょうか
ちなみに@を付けないとどうなりますか
変数名に記号が付くのが凄く気になります
@memo = {}
# 計算結果をメモする
@memo[[remain, pre]] = cnt >>824
[remain, pre]は辞書のキーって理解であってる
irb等のREPLで試すとすぐ分かる
@はインスタンス変数に付けるプレフィクス オブジェクトはなんでもイケるんじゃなかったっけ?
ハッシュ値さえちゃんと返せば。 キーにした配列を変化させた時はrehashしないとキーが一致しなくなる
文字列のキーは変化させても、キーはセットしたときのまま なるほどね。先入観として[a,b]ってかいたら毎回newされて、
キーとしては未定義値のnil固定か、別オブジェクト扱いで不定になるか、と思えた str = <<'EOT'
str = << 'EOT'
here doc で、下のように、<< の後ろに半角空白があると、文法エラーになる
それと、WSL のUbuntu 側にインストールしたRuby で、
Windows 側にあるCSV ファイルを処理すると、
改行コードが異なるから、不正な形式のファイルと言われる。
改行コードを、LF だけに変えると、正しく処理できる options に行区切りを指定したら、
WSL のUbuntu 側にインストールしたRuby で、
Windows 側にあるCSV ファイルを処理できた
row_sep: "\r\n" では出来たが、
row_sep: :auto では、エラーになる require ‘pry’
def foo;@a = 1;end
binding.pry
このコードを実行し、出て来たプロンプトで
> cd Object
> instance_methods(false)
=> [:to_yaml, :to_yaml_properties, :pry, :__binding__, :psych_to_yaml]
と出ました。fooメソッドが見つかりません。
トップレベルで定義したfooメソッドはObjectのメソッドに成るのでは?
ちなみにコマンドラインでpryとタイプして
[1] pry(main)> def foo;@a=0;end
=> :foo
[2] pry(main)> cd Object
[3] pry(Object):1> instance_methods(false)
=> [:to_yaml, :to_yaml_properties, :pry, :__binding__, :psych_to_yaml, :foo]
[4] pry(Object):1>
ちゃんとfooが見えます。 自己解決しました。
[1] pry(main)> self.private_methods(false)
とすれば見えました。 RubyからDB扱うときって皆は何のライブラリ使ってるの? RubyでDBを扱う場合、プロダクションで使われているのは世界で唯一ActiveRecordのみ インターフェースじゃん。
バックでmysqlとか動いてるぞ。
いいからちゃんと勉強しろよ。 >>837
ActiveRecordが大半なのは間違いない
ORMを求めてるならsequel、rom、hanami等
素のDBライブラリならmysql2, sqlite3-ruby, ruby-pg
ArelでSQLを構築してDBライブラリ使ってSQL実行してもいい >>839
Rails屋がSQLすら書けなさそうに見えて腹立つのは分からんでもないけど、今はDBインターフェースの話しかしてないぞ 「Node.js超入門、掌田津耶乃、2017」を読んでいるけど、JavaScript の基本は、Ruby
Ruby のSinatra, JS のNode.js を、full scratch で書くと、ほぼ同じ
Rails, JSのExpress + Bookshelf が、ほぼ同じ プログラミング本では、掌田が第一人者。
Unity, UE4 などのゲームエンジンから、最近は、Python, Node.js にも進出
売れる・成長する分野には、必ず掌田が参入してくる。
業界の風見鶏
「Node.js超入門、掌田津耶乃、2017」
この本で、Sinatra, Rails を学ぶ方が簡単。
20時間ほどで読める
後は、YouTube の動画で、OK やっぱ掌田津耶乃ってだめな人だった
調べたらわかったよ 今の時代、開発速度が速すぎて誰も良い本なんか書けないよ
それを書き終わる頃には時代遅れになってるんだから 掌田津耶乃はだめな本
山田 祥寛は良い本
という評価が一般的
掌田津耶乃は何冊か読んでいるけど、
見比べてみるとたしかにダメダメなんだなぁ。 ■ このスレッドは過去ログ倉庫に格納されています