Ruby 初心者スレッド Part 66
レス数が900を超えています。1000を超えると表示できなくなるよ。
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured Ruby が C++ を Hate してるのはホント良く判る >>836
Perlもエアプかいw
駱駝道で極楽浄土に行けるといいネ >>838
今やPerl6は存在しないことを知らないの?w >>2
リファクタリング:Rubyエディション (日本語) 単行本、2020/3、
Jay Fields/Shane Harvie/Martin Fowler/Kent Beck/長尾 高弘
Martin Fowlerの名著『リファクタリング』のRuby対応全面改訂版が、ついに復刊!
Kent Beck は、eXtreme Programming(XP)の提唱者
Java 版をRubyへ書き直したもの。
2010年の復刊。8,800円! ruby初心者です。
以下のNodeクラスにEnumerable moduleをincludeできるようなeachメソッドを
定義することはできますか。
class Node
attr_accessor :data, :next
def initialize(data)
@data = data
@next = nil
end
end >>842 さん
特に、>>843 さん
実装を教えていただいて、ありがとうございます。
https://ideone.com/IjTOn4に記載されていた実装は
私では考えつくことができませんでした。
何を勉強したら書けるようになるのか、悩みます。
ちなみにですが、私の考えたeachの実装は以下のようなものです。
class Node
def each
while self.next != nil
yield self.data
self.self.next
end
end
end
(でも、私のeachは動作しません。) >> 844
self.self.nextは、self = self.nextの誤記です。 Mix-in とは、何かのモジュールをinclude すると、
それが継承チェーンの親の所へ入ってくるから、
そのモジュール内の関数が使えるようになる
例えば、include Enumerable とすると、
自クラスで、each を定義してあれば、Enumerable内のすべての関数が使える
Array も、Enumerableをインクルードしているから、
Array内の関数と、Enumerable内の関数が使える
つまり普通に、複数のインスタンスを配列に入れておけば、
Array・Enumerable内の関数が使える
ほとんど、この2つのクラス内の関数ばかりを使うから、
どういう事ができるか、見ておいた方がよい
また、eachを定義せずに、Enumerableの機能を使うには、Enumerator を使う。
eachは内部イタレータで、Enumeratorは外部イタレータ
初心者はイタレータなど考えず、普通に配列内に入れておけばよい
デザインパターンなら、この本が良い。
改訂2版 Ruby逆引きハンドブック、2018 「Ruby each 実装」「ruby イテレータ 実装」で検索!
内部・外部イテレータの違いも、調べてみれば?
ruby eachの実装
https://teratail.com/questions/117974 >>846さん
アドバイスありがとうございました。
示していただいたキーワードを使ってネットの情報を読み漁ってました。
rubyに関する基本的な文法知識も弱いのですが、デザインパターンという
考え方?思想?もわかっていないので、文法の習得と並行して勉強が必要だと
感じました。修業します。 Mix-in の例で、include Enumerable して、
Enumerableモジュール内の関数が使えるように、
自クラスで、each を実装しましょうとか、
こういうのを初心者向けで見たことがない
ほとんど、こういう事をやってる人は、いないと思う
なぜかというと、Array は、Enumerableをインクルードしているから、
配列に入れれば、何でもできるから
だから、そもそも、どうしてこういう事をしようと思ったのか、疑問に思う
プログラミングのお題スレの問題でも、
すべて、Array, Hash, Enumerableで解ける 一部のメソッドで、遅延評価できる
instance method Enumerable#lazy
lazy -> Enumerator::Lazy
map/collect, flat_map/collect_concat
select/find_all
reject
grep
take, take_while
drop, drop_while
一貫性のため、ブロックを渡さないケースのみlazy
zip, cycle Enumerableは高階関数とともに脱初心者の一番の目安
この2つをパパっと作って使えるようになれば初心者は卒業 Ruby の強みは、
Array, Hash, Enumerable, Enumerator の豊富なメソッドを、
メソッドチェーンでつなげていくプログラミング
どういうメソッドがあるのか、じっくり見ておくべき! とうとうperlより下になったかw
誕生経緯w存在意義が…w 問題 Rubyを開発したのはだれか
答え 2ちゃんねる開発者でもあるひろゆき
根拠
https://programmercollege.jp/column/16456/ 初めまして、現在の状況はRuby、Windows 10、 VSCode(エディターのみ)です。
以前Basic言語をやってましたがRubyの言語は勉強しました。
1.RubyでVSCodeの便利なデバッガーは何がいいですか。
2.RubyでVSCodeのインターネットまたは本等の使い方を勉強したい。
3.gemへのログインの方法を知りたい。
以上の3点知ってる人がいましたら教えてください、お願いします。 >>789
に書いた
漏れは、Windows 10, WSL1, Ubuntu 18.04 で、
VSCode の拡張機能、Remote WSL も使う
WSL2 と言う、Hyper-v を使ったものもあるけど、
安定バージョンかどうかは、知らない
VSCodeの便利な拡張機能については、VSCodeのスレで聞いてください。
本は、徹底解説Visual Studio Code、本間咲来、2019/9
漏れのおすすめ拡張機能、Code Runner
右クリックメニューから、選択したコード、またはファイル全体を実行する
この設定をチェックしておく
Code-runner: File Directory As Cwd
Whether to use the directory of the file to be executed as the working directory.
デバッガーは漏れは、p, pp, tap などで見てる
VSCodeの拡張機能では、Ruby というものかな?
8個の拡張機能をパックした、Ruby extension pack とか?
漏れは、よく知らない
gem でインストールするのは、bundler だけ!
その後は全て、bundlerでインストールする
gemは、依存関係を考慮しなかったっけ?
gemでインストールしても、依存関係で動かないかも
gem, bundler については、検索して調べてください! g++です
undefined reference to `ruby_init'
と表示されます
たぶんdllに入ってると思うのですがどこにあるのでしょうか?
よろしくお願いします そもそもDLLが見つかりません
ほんとお願いします g++ は、GNU の GCC に含まれる、C++コンパイラ。
GNU で、Windows 向けのDLL を作るの?
RubyInstaller か?
MSYS2/MINGW の、RubyInstaller Development Kit(DevKit)有りか?
ridk install がどうしたこうしたとか?
よく知らないけど
https://rubyinstaller.org/downloads/
Windows 10, WSL, Linux でコンパイルする方法なら、
>>789
に書いたけど c++にruby_initを組み込んでみたいです
コンパイルエラーがでます
さっぱりわかりません #include <ruby.h>
int main() {
// Rubyインタプリタの初期化
ruby_init();
// スクリプトの実行
rb_eval_string("print 'Hello World!'");
// Rubyインタプリタのクリーンアップ
ruby_cleanup(0);
} 正気?
初心者が、こんな事をする訳ないだろ
C/C++ を、数年以上やってからの話 ffi は C や C++ ように作成された共有ライブラリを、
Ruby で扱うことができるようにするためのライブラリです
libffi を使っているので、事前にインストールが必要です。
NativeExtensions を直接扱わずに、C を操作できます
ruby ffi 入門
https://hawksnowlog.blogspot.com/2019/04/getting-started-ruby-ffi.html C/C++ から、Ruby を呼ぶ方法か
検索すれば? Windows では、無理じゃない?
Linux で探した方が良いかも Windows使ってるってだけで教祖様の号令一下で石投げられるのがRubyコミュニティだからな
Pythonにしとき C/C++ から Python を呼ぶ方法なんて袋叩きに逢うのが
Python コミュニティですが、それがなにかどうかされますた??? 普通は、Ruby から、C 製のNArray みたいな高速なライブラリを呼ぶ
逆に、Cから、Rubyを呼ぶ事はない。
普通に、Rubyコマンドを呼べば良いだけ
例えば、Rubyスクリプト内で、Python3 コマンドを呼ぶ
str = `python3 -c 'print( "あ" )'`
puts str #=> あ まつもと:それから「Backquotes」の地上げも考えていたんですけども、Backquotesをするとシェルで実行して結果を文字列で返すってやつですね。
(参加者から「いける、いける」の声)
まつもと:なんかあの辺で「いける、いける」って言ってる人がいますけど、信じない(笑)。なので、これももうちょっと先で、もう1回くるかもしれませんが、少なくとも3.0では死なないということです。
https://logmi.jp/tech/articles/321308
バージョンによって使えてたクォートが使えなくなったりするクソ言語 Python 2/3 のコミュニティーの分断は、地獄だった
だからRubyは、2/3 で絶対に分断させない! マイナーバージョンで細切れ分断してるからな。
その辺は抜かりない。 >>882
>C/C++ から Python を呼ぶ方法なんて袋叩きに逢うのが Python コミュニティ
初めて聴いたけどどこ情報? >>881
「私がWindowsを嫌っているのではなく、WindowsがRubyを嫌っているのだ。だからWindowsを使ってはいけない。」と教組様が言ってたけど。 教祖も言ってるけど
windowsならrubyやめてpython使う方が楽ちん エラーが出たので助けてほしいです…
ターミナルでrails db:createをするの下記のような文が出ます…
Traceback (most recent call last):
4: from bin/rails:3:in `<main>'
3: from bin/rails:3:in `load'
2: from /Users/tech-camp/projects/tweet/bin/spring:10:in `<top (required)>'
1: from /Users/tech-camp/projects/tweet/bin/spring:10:in `read'
/Users/user/projects/tweet/bin/spring:10:in `read': No such file or directory @ rb_sysopen - /Users/user/projects/tweet/Gemfile.lock (Errno::ENOENT) エラーが出たので教えてほしいです…
ターミナルでrails db:createをしたらこのようになりました…
Traceback (most recent call last):
4: from bin/rails:3:in `<main>'
3: from bin/rails:3:in `load'
2: from /Users/user/projects/tweet/bin/spring:10:in `<top (required)>'
1: from /Users/user/projects/tweet/bin/spring:10:in `read'
/Users/user/projects/tweet/bin/spring:10:in `read': No such file or directory @ rb_sysopen - /Users/user/projects/tweet/Gemfile.lock (Errno::ENOENT) >>865
$ export PKG_CONFIG_PATH="$HOME/.rbenv/versions/2.7.2/lib/pkgconfig"
$ gcc $(pkg-config --cflags --libs ruby-2.7) hello.c -o hello
上の例はWindowsじゃなくmacOSでrbenv使ってる環境だけど
Windowsでも.pcファイルあると思うからpkg-configで必要なオプション取得すれば良いと思うよ 拡張ライブラリについての質問です
一次元配列の場合はデータを取得できたんですけど、
二次元配列の場合はどうすればいいんでしょうか?
よろしくお願いします
//一次元配列の場合
num = rb_ary_entry(p_val, offset);
a = FIX2INT(num); VALUE, FIX2INT, RARRAY, rb_ary_entry
これは、Ruby なのか?
奇妙 Ruby では、ary[offset] だろ。
2次元配列なら、
ary = [ [1, 2], [11, 12], [21, 22] ]
ary[0][1] = 99
p ary #=> [[1, 99], [11, 12], [21, 22]]
p ary.length #=> 3
p ary[0].length #=> 2 やっと解りました。。。
どうもありがとうございました!
ary = [[0,1],[2,3],[4,5]]
num0 = rb_ary_entry(ary_val, 2);
num1 = rb_ary_entry(num0, 0);
a = FIX2INT(num1);
num0 = rb_ary_entry(ary_val, 2);
num1 = rb_ary_entry(num0, 1);
b = FIX2INT(num1);
sprintf(buf, "%d , %d", a, b);
MessageBox(NULL, buf, "", MB_OK); ocraを実行してexe化したのですが、
libssp-0.dllがないというエラーが出てフリーズしました
放っておけばそのうちocraがバージョンアップで対応してくれるんでしょうか?
プログラムは、
puts "hoge"
だけです フォルダ名に日本語混ざってるとocra使えないからそれかもね 日本語Windows環境ならocraよりneri使ったほうがいいと思うよ どちらもだめでした
MinGWが64bitなのがいけないいんですかね?
neriの場合は、「アプリケーションを正しく起動できませんでした」
と出ます
日本語は使ってないですよ 最近同じエラー吐いてる人が多いからマルチバイト文字とかじゃなくてocraのバグじゃね
今つっかかってる場所はlibssp-0.dllの有無
libssp-0.dll入手して適切なフォルダに入れれば動くかもしれないし、それを超えてもまた次のエラーメッセージ出るかもしれない
こういう場合むしろ古いバージョンのocraやrubyを使ったほうが正常に動いたりするよ
特定のバージョンとの相性で上手く動作したらむやみにアップデートしないことな ひょっとして、フォルダ名・PC のユーザー名に、日本語を使っていないか?
>neriの場合は、「アプリケーションを正しく起動できませんでした」
もっと正確なエラーメッセージを取得して、それで検索すれば?
どういう理由で起動できないのかを、知りたい
色々な理由があるから、このメッセージだけでは原因を特定できない
Linux みたいに、Windows には、OS のログとか無いのか? 日本語じゃないって否定してんのに直前のレスも読めねーのか
https://stackoverflow.com/questions/64368535/ruby-compile-with-ocra-error-libssp-0-dll-not-found
Maybe you don't have the libssp-0.dll file installed.
You can download it from https://www.dll-files.com/libssp-0.dll.html
then placing the file where the error says. neriのエラー
アプリケーションを正しく起動できませんでした(0xc000007b)。[OK]をクリックしてアプリケーションを閉じてください。
libssp-0.dllはMinGWでgetするdllです
バグか64bitに対応してないかのどちらかだと思います
暫く様子を見ることにしました
あと古いバージョンも試してみます こっちは64bit windows10でneri使えてるけどなぁ 2.4で動きました
しかし自作のsoファイルをソースに含めると
ocra test.rb --dll ddddd.so
実行すると
FATAL ERROR: Bad signature in executable. 自分でエラーを作っているから、原因は君にしか分からない
そのエラーメッセージで検索すれば? 文字列内にある、URL を抜き出す、URI.extract、
または、正規表現のURI.regexp は、
Ruby 2.2 から obsolete になっているけど、
それに代わるものは、何ですか?
require 'uri'
URI.extract("文字列", ['http','https'] )
p URI.regexp =~ "http://www.ruby-lang.org/" #=> 0 >>912
neriでexe化できました
ocraは相変わらずですが
ありがとうございました! >>913
text ="
https://i.imgur.com/UJbFSti.jpg
http://www.ruby-lang.org/
"
text.scan(URI.regexp).map { Regexp.last_match }.each { |uy|
puts uy
} text.scan(URI.regexp){|v| puts '%s://%s' % [v.shift, v.compact.join]} text.scan( URI.regexp ){ |v| p v }
出力
[ "https", nil, nil, "i.imgur.com", nil, nil, "/UJbFSti.jpg", nil, nil ]
[ "http", nil, nil, "www.ruby-lang.org", nil, nil, "/", nil, nil ]
この奇妙な、nil は何?
それに、:// が飛ばされている https://bugs.ruby-lang.org/issues/2542
はっきりした理由は書いてないけど
RFC2396自体がobsoleteになって新しくRFC3986/3987対応のregex考えるの大変だから
URI.extract/URI.regexpはobsoleteになったように見える
なので今の仕様で問題ないなら使えばいいんじゃないかって気がする
warningを避けたいならURI::DEFAULT_PARSER.extractを直接使ってもいいけど中身は同じ
もう少しちゃんとしたのがよければtwitter-textのExtractor.extract_urls qiitaにRFC3986対応の正規表現とか出てるけどそんな大変なのかね
詳しく知らんからなんも言えないけど 多言語対応まで考えるとややこしいから、すっぱりあきらめたんやろ。 RFC3986に準拠したURI検証用正規表現
https://qiita.com/shimataro999/items/fced9665fa970c009c1e
HTTP/HTTPS の所には、こういうのが出てくるから、これらが特殊文字なんだろう。
もっと簡単な正規表現で良い
終了点を知りたい。ある文字が出たら、そこで終わりみたいな。
URL で使われない文字
^https?:\/\/
|[!$&'()*+,;=]|:)*@)?
|[!$&'()*+,;=])*)(:\d*)?
|[!$&'()*+,;=]|:)+
|[!$&'()*+,;=]|[:@]))*)*
[-._~] コンテンツをファイルに書きこみながら、同時にハッシュ値も求める場合、
Go では、io.MultiWriter で、2回読み込まずに処理できるらしいが、
Ruby にも、こういう機能がありますか? RailsチュートリアルをRubyの言語自体の入門書としてみた場合、一般的な入門書の何割ぐらいをカバーしてるものなのですか? Rails チュートリアルは軽く「たのしいRuby」の10倍以上はある
MVC は、構造・デザインパターンなどを学ぶのが大変
おまけに、Linux・サイト製作の基本知識とか、
データベース・ERB・HTML・CSS/SASS・JavaScript・Webpack・テストとか そして、それでいて文法やメソッドなどの基礎的なところをすっとばしている可能性が。w
要するに、方向性が違うので、どっちが他方をどう含んでるかは何とも言えんやろ。 入門書で文法を学んだら、Enumerable のメソッドの内容を見てから、
プログラミングのお題スレの問題を解いたり、
テキスト処理などを少しやった方が良いと思う
Rails チュートリアルは、時間が掛かるから
まあでも、ウェブサイトの構築運用の最短距離は、Linux・AWS・Rails。
バックエンド・エンジニアなら、Linux・AWS・Ruby 3割くらいじゃね
あと別にrubyの魔術コードを書けたり読めたりしなくても生きていける ちょ、DateTimeがdeprecatedになってるんですが・・・
これいつから? 2.5からだね
なお英語版ドキュメントへの記載を忘れていたためRails勢には全く認知されておらず最近になって混乱を引き起こしている模様
これがRubyクォリティ な?ww
マイナーバージョンアップで互換性崩れるだろ?www >>933
2.5からというソースある?
9末に特にアナウンスもなく変更されてるように見えるんだけど
https://github.com/rurema/doctree/commit/0645aad1d9107fa4020269f12ca9a21ec6bd859c
deprecatedになっても削除されるものじゃないから実害はないんだけど
さすがにこれはやり方が乱暴 DateTime は非推奨で、代わりに、Time を使うこと。
つまり、Date, Timeを使う
DateTime < Date < Comparable
Time < Comparable レス数が900を超えています。1000を超えると表示できなくなるよ。