X



Ruby 初心者スレッド Part 66
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん (ワッチョイ 2a2c-RM0q)
垢版 |
2020/01/04(土) 01:15:34.30ID:X7t3Qsuc0
プログラミング言語 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
0837デフォルトの名無しさん (ワイーワ2 FFca-YvdE)
垢版 |
2020/10/26(月) 15:04:44.51ID:EltRWJ/HF
Ruby が C++ を Hate してるのはホント良く判る
0840デフォルトの名無しさん (ワッチョイ c12c-G7xE)
垢版 |
2020/10/28(水) 21:30:30.88ID:H1Ljm7vl0
>>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円!
0841デフォルトの名無しさん (ワントンキン MMd3-8ci1)
垢版 |
2020/10/31(土) 08:20:00.50ID:B8uNhuq7M
ruby初心者です。

以下のNodeクラスにEnumerable moduleをincludeできるようなeachメソッドを
定義することはできますか。

class Node
attr_accessor :data, :next
def initialize(data)
@data = data
@next = nil
end
end
0842デフォルトの名無しさん (ワッチョイ c12c-fDVG)
垢版 |
2020/10/31(土) 14:36:23.15ID:zTfIs5nt0
「Ruby Enumerable 実装」で検索!

Rubyで簡潔にeachなどの機能を持つクラスを実装する方法
https://ja.stackoverflow.com/questions/1593/ruby%E3%81%A7%E7%B0%A1%E6%BD%94%E3%81%ABeach%E3%81%AA%E3%81%A9%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E6%8C%81%E3%81%A4%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

Ruby: EnumerableをincludeするよりEnumeratorを返そう
https://techracho.bpsinc.jp/hachi8833/2018_06_29/57698
0844デフォルトの名無しさん (ワンミングク MMd3-D/jF)
垢版 |
2020/11/01(日) 00:02:35.61ID:X6j+EvTNM
>>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は動作しません。)
0845デフォルトの名無しさん (ワンミングク MMd3-D/jF)
垢版 |
2020/11/01(日) 00:07:41.13ID:X6j+EvTNM
>> 844
self.self.nextは、self = self.nextの誤記です。
0846デフォルトの名無しさん (ワッチョイ c12c-fDVG)
垢版 |
2020/11/02(月) 02:18:36.47ID:cH+o+Znx0
Mix-in とは、何かのモジュールをinclude すると、
それが継承チェーンの親の所へ入ってくるから、
そのモジュール内の関数が使えるようになる

例えば、include Enumerable とすると、
自クラスで、each を定義してあれば、Enumerable内のすべての関数が使える

Array も、Enumerableをインクルードしているから、
Array内の関数と、Enumerable内の関数が使える

つまり普通に、複数のインスタンスを配列に入れておけば、
Array・Enumerable内の関数が使える

ほとんど、この2つのクラス内の関数ばかりを使うから、
どういう事ができるか、見ておいた方がよい

また、eachを定義せずに、Enumerableの機能を使うには、Enumerator を使う。
eachは内部イタレータで、Enumeratorは外部イタレータ

初心者はイタレータなど考えず、普通に配列内に入れておけばよい

デザインパターンなら、この本が良い。
改訂2版 Ruby逆引きハンドブック、2018
0847846 (ワッチョイ c12c-fDVG)
垢版 |
2020/11/02(月) 08:31:13.28ID:cH+o+Znx0
「Ruby each 実装」「ruby イテレータ 実装」で検索!
内部・外部イテレータの違いも、調べてみれば?

ruby eachの実装
https://teratail.com/questions/117974
0848デフォルトの名無しさん (ササクッテロル Spc5-D/jF)
垢版 |
2020/11/03(火) 09:41:15.68ID:XEwmRHqvp
>>846さん
アドバイスありがとうございました。
示していただいたキーワードを使ってネットの情報を読み漁ってました。
rubyに関する基本的な文法知識も弱いのですが、デザインパターンという
考え方?思想?もわかっていないので、文法の習得と並行して勉強が必要だと
感じました。修業します。
0849846 (ワッチョイ c12c-WmiC)
垢版 |
2020/11/03(火) 22:57:00.33ID:pWieQE6j0
Mix-in の例で、include Enumerable して、
Enumerableモジュール内の関数が使えるように、
自クラスで、each を実装しましょうとか、
こういうのを初心者向けで見たことがない

ほとんど、こういう事をやってる人は、いないと思う

なぜかというと、Array は、Enumerableをインクルードしているから、
配列に入れれば、何でもできるから

だから、そもそも、どうしてこういう事をしようと思ったのか、疑問に思う

プログラミングのお題スレの問題でも、
すべて、Array, Hash, Enumerableで解ける
0851デフォルトの名無しさん (アウウィフ FFcd-GqKp)
垢版 |
2020/11/04(水) 10:08:06.70ID:wF8lqQTTF
Ruby、信者は、おことわり
0852846 (ワッチョイ ad2c-j5Tt)
垢版 |
2020/11/04(水) 23:31:34.08ID:oOk5Pqvr0
一部のメソッドで、遅延評価できる

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
0854846 (ワッチョイ ad2c-j5Tt)
垢版 |
2020/11/05(木) 23:53:13.53ID:lCe7ZMVj0
Ruby の強みは、

Array, Hash, Enumerable, Enumerator の豊富なメソッドを、
メソッドチェーンでつなげていくプログラミング

どういうメソッドがあるのか、じっくり見ておくべき!
0857デフォルトの名無しさん (ワッチョイ debb-+U3E)
垢版 |
2020/11/08(日) 10:17:52.02ID:WJSuSySW0
助成金ひっぱりんごビジネス
0861デフォルトの名無しさん (ワッチョイ 8101-aWq5)
垢版 |
2020/11/09(月) 21:51:36.37ID:A/fRbmyh0
初めまして、現在の状況はRuby、Windows 10、 VSCode(エディターのみ)です。
以前Basic言語をやってましたがRubyの言語は勉強しました。
1.RubyでVSCodeの便利なデバッガーは何がいいですか。
2.RubyでVSCodeのインターネットまたは本等の使い方を勉強したい。
3.gemへのログインの方法を知りたい。
以上の3点知ってる人がいましたら教えてください、お願いします。
0862デフォルトの名無しさん (ワッチョイ ad2c-faW7)
垢版 |
2020/11/10(火) 00:15:08.25ID:TotITmpP0
>>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 については、検索して調べてください!
0864デフォルトの名無しさん (ワイーワ2 FF1a-D/bg)
垢版 |
2020/11/10(火) 12:09:50.03ID:08CevRpcF
Ruby 卒業しようぜ さっさと
0865デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/12(木) 23:43:36.78ID:9JGUhgPP0
g++です
undefined reference to `ruby_init'
と表示されます
たぶんdllに入ってると思うのですがどこにあるのでしょうか?
よろしくお願いします
0866デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/12(木) 23:44:28.91ID:9JGUhgPP0
versionは2.7.0です
0868デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/12(木) 23:48:50.89ID:9JGUhgPP0
そもそもDLLが見つかりません
ほんとお願いします
0870862 (ワッチョイ dd2c-tE7G)
垢版 |
2020/11/13(金) 00:22:55.68ID:LLS1FCOb0
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
に書いたけど
0872デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/13(金) 00:34:11.29ID:1m9BN6xD0
#include <ruby.h>

int main() {
// Rubyインタプリタの初期化
ruby_init();

// スクリプトの実行
rb_eval_string("print 'Hello World!'");

// Rubyインタプリタのクリーンアップ
ruby_cleanup(0);
}
0884デフォルトの名無しさん (ワッチョイ dd2c-tE7G)
垢版 |
2020/11/13(金) 06:40:07.62ID:LLS1FCOb0
普通は、Ruby から、C 製のNArray みたいな高速なライブラリを呼ぶ

逆に、Cから、Rubyを呼ぶ事はない。
普通に、Rubyコマンドを呼べば良いだけ

例えば、Rubyスクリプト内で、Python3 コマンドを呼ぶ

str = `python3 -c 'print( "あ" )'`

puts str #=> あ
0885デフォルトの名無しさん (ワッチョイ 1d4e-hLVw)
垢版 |
2020/11/13(金) 07:00:14.39ID:PGsPGVPV0
まつもと:それから「Backquotes」の地上げも考えていたんですけども、Backquotesをするとシェルで実行して結果を文字列で返すってやつですね。

(参加者から「いける、いける」の声)

まつもと:なんかあの辺で「いける、いける」って言ってる人がいますけど、信じない(笑)。なので、これももうちょっと先で、もう1回くるかもしれませんが、少なくとも3.0では死なないということです。
https://logmi.jp/tech/articles/321308

バージョンによって使えてたクォートが使えなくなったりするクソ言語
0888デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 12:02:41.44ID:RWm0omqa0
>>882
>C/C++ から Python を呼ぶ方法なんて袋叩きに逢うのが Python コミュニティ
初めて聴いたけどどこ情報?
0890デフォルトの名無しさん (ワッチョイ 7501-NSHw)
垢版 |
2020/11/13(金) 14:17:08.52ID:/AMzz1sP0
>>881
「私がWindowsを嫌っているのではなく、WindowsがRubyを嫌っているのだ。だからWindowsを使ってはいけない。」と教組様が言ってたけど。
0891デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 14:22:10.08ID:RWm0omqa0
教祖も言ってるけど
windowsならrubyやめてpython使う方が楽ちん
0892デフォルトの名無しさん (アウアウウー Saa9-rkyG)
垢版 |
2020/11/13(金) 14:47:22.41ID:b3aeLCbPa
エラーが出たので助けてほしいです…
ターミナルで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)
0893デフォルトの名無しさん (アウアウウー Saa9-rkyG)
垢版 |
2020/11/13(金) 14:49:36.90ID:b3aeLCbPa
エラーが出たので教えてほしいです…
ターミナルで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)
0896デフォルトの名無しさん (ワッチョイ a301-+irU)
垢版 |
2020/11/13(金) 17:04:48.25ID:b4HB1/RK0
>>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で必要なオプション取得すれば良いと思うよ
0897デフォルトの名無しさん (ワッチョイ ed5f-D0pj)
垢版 |
2020/11/17(火) 15:37:28.16ID:+8mZ0oHh0
拡張ライブラリについての質問です
一次元配列の場合はデータを取得できたんですけど、
二次元配列の場合はどうすればいいんでしょうか?
よろしくお願いします

//一次元配列の場合
num = rb_ary_entry(p_val, offset);
a = FIX2INT(num);
0901デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/18(水) 19:49:47.73ID:XrXdqU1w0
やっと解りました。。。
どうもありがとうございました!
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);
0902デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/24(火) 05:57:29.80ID:tcZG3tlz0
ocraを実行してexe化したのですが、
libssp-0.dllがないというエラーが出てフリーズしました
放っておけばそのうちocraがバージョンアップで対応してくれるんでしょうか?

プログラムは、

puts "hoge"

だけです
0905デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/24(火) 07:16:55.53ID:tcZG3tlz0
どちらもだめでした
MinGWが64bitなのがいけないいんですかね?
neriの場合は、「アプリケーションを正しく起動できませんでした」
と出ます
日本語は使ってないですよ
0906デフォルトの名無しさん (アウアウウー Sa3b-cChY)
垢版 |
2020/11/24(火) 09:00:20.18ID:gfNKbZsOa
最近同じエラー吐いてる人が多いからマルチバイト文字とかじゃなくてocraのバグじゃね
今つっかかってる場所はlibssp-0.dllの有無
libssp-0.dll入手して適切なフォルダに入れれば動くかもしれないし、それを超えてもまた次のエラーメッセージ出るかもしれない

こういう場合むしろ古いバージョンのocraやrubyを使ったほうが正常に動いたりするよ
特定のバージョンとの相性で上手く動作したらむやみにアップデートしないことな
0907デフォルトの名無しさん (ワッチョイ a32c-ti/z)
垢版 |
2020/11/24(火) 09:01:18.97ID:XRJpBbZB0
ひょっとして、フォルダ名・PC のユーザー名に、日本語を使っていないか?

>neriの場合は、「アプリケーションを正しく起動できませんでした」
もっと正確なエラーメッセージを取得して、それで検索すれば?

どういう理由で起動できないのかを、知りたい
色々な理由があるから、このメッセージだけでは原因を特定できない

Linux みたいに、Windows には、OS のログとか無いのか?
0909デフォルトの名無しさん (ワッチョイ 4b5f-cChY)
垢版 |
2020/11/24(火) 12:56:57.47ID:tcZG3tlz0
neriのエラー
アプリケーションを正しく起動できませんでした(0xc000007b)。[OK]をクリックしてアプリケーションを閉じてください。

libssp-0.dllはMinGWでgetするdllです

バグか64bitに対応してないかのどちらかだと思います
暫く様子を見ることにしました
あと古いバージョンも試してみます
0911デフォルトの名無しさん (ワッチョイ 775f-FP8+)
垢版 |
2020/11/25(水) 06:01:29.82ID:vPLi7EhQ0
2.4で動きました
しかし自作のsoファイルをソースに含めると
ocra test.rb --dll ddddd.so

実行すると
FATAL ERROR: Bad signature in executable.
0913デフォルトの名無しさん (ワッチョイ b72c-8s6k)
垢版 |
2020/11/25(水) 12:51:53.26ID:BeZXjuPe0
文字列内にある、URL を抜き出す、URI.extract、
または、正規表現のURI.regexp は、

Ruby 2.2 から obsolete になっているけど、
それに代わるものは、何ですか?

require 'uri'

URI.extract("文字列", ['http','https'] )

p URI.regexp =~ "http://www.ruby-lang.org/"; #=> 0
0914デフォルトの名無しさん (ワッチョイ 775f-FP8+)
垢版 |
2020/11/25(水) 16:47:47.83ID:vPLi7EhQ0
>>912
neriでexe化できました
ocraは相変わらずですが
ありがとうございました!
0918916 (ワッチョイ b72c-OOND)
垢版 |
2020/11/27(金) 08:41:48.24ID:lOUpIwv20
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 は何?
それに、:// が飛ばされている
0920デフォルトの名無しさん (ワッチョイ 9f01-1+jW)
垢版 |
2020/11/27(金) 17:54:13.89ID:tPIe9OcJ0
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
0923デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/28(土) 11:23:25.42ID:FGpMIdZG0
RFC3986に準拠したURI検証用正規表現
https://qiita.com/shimataro999/items/fced9665fa970c009c1e

HTTP/HTTPS の所には、こういうのが出てくるから、これらが特殊文字なんだろう。
もっと簡単な正規表現で良い

終了点を知りたい。ある文字が出たら、そこで終わりみたいな。
URL で使われない文字

^https?:\/\/

|[!$&'()*+,;=]|:)*@)?
|[!$&'()*+,;=])*)(:\d*)?
|[!$&'()*+,;=]|:)+
|[!$&'()*+,;=]|[:@]))*)*

[-._~]
0924デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 03:48:29.64ID:r8rQ87Qr0
コンテンツをファイルに書きこみながら、同時にハッシュ値も求める場合、
Go では、io.MultiWriter で、2回読み込まずに処理できるらしいが、

Ruby にも、こういう機能がありますか?
0925デフォルトの名無しさん (ワッチョイ ffbb-BCf+)
垢版 |
2020/11/30(月) 20:22:04.13ID:G81cwQG00
RailsチュートリアルをRubyの言語自体の入門書としてみた場合、一般的な入門書の何割ぐらいをカバーしてるものなのですか?
0926デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 21:45:48.29ID:r8rQ87Qr0
Rails チュートリアルは軽く「たのしいRuby」の10倍以上はある

MVC は、構造・デザインパターンなどを学ぶのが大変

おまけに、Linux・サイト製作の基本知識とか、
データベース・ERB・HTML・CSS/SASS・JavaScript・Webpack・テストとか
0927デフォルトの名無しさん (ワッチョイ 1f33-ZPXR)
垢版 |
2020/11/30(月) 22:12:15.34ID:ifp6ptD/0
そして、それでいて文法やメソッドなどの基礎的なところをすっとばしている可能性が。w

要するに、方向性が違うので、どっちが他方をどう含んでるかは何とも言えんやろ。
0928926 (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 22:44:30.64ID:r8rQ87Qr0
入門書で文法を学んだら、Enumerable のメソッドの内容を見てから、

プログラミングのお題スレの問題を解いたり、
テキスト処理などを少しやった方が良いと思う

Rails チュートリアルは、時間が掛かるから

まあでも、ウェブサイトの構築運用の最短距離は、Linux・AWS・Rails。
バックエンド・エンジニアなら、Linux・AWS・Ruby
0936デフォルトの名無しさん (ワッチョイ 732c-lBG8)
垢版 |
2020/12/02(水) 12:39:09.20ID:vDg6xkSY0
DateTime は非推奨で、代わりに、Time を使うこと。
つまり、Date, Timeを使う

DateTime < Date < Comparable

Time < Comparable
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況