[過去ログ] Ruby 初心者スレッド Part 66 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
613: (ワッチョイ 1b8c-gyt0) 2020/08/08(土)09:55 ID:ZxDC46c+0(1) AAS
別言語のは移行が簡単なのか
614
(2): (ワッチョイ a935-GKXO) 2020/08/09(日)19:19 ID:En2E3W9T0(1/3) AAS
NokogiriのTutorialsを見てます。

html_doc = Nokogiri::HTML("<html><body><h1>Mr. Belvedere Fan Club</h1></body></html>")

このコードでHTMLモジュールのparseメソッドが呼び出せる様なのですが、なぜモジュール名の後にカッコを付ければ、parseメソッドが呼び出せるのでしょう?

HTMLメソッドが定義してあって、その中でparseメソッドが呼び出されているのでしょうか?
615: (ワッチョイ a935-GKXO) 2020/08/09(日)19:26 ID:En2E3W9T0(2/3) AAS
>>614
module Nokogiri
def HTML(s)
puts s
end
module_function :HTML

end
省2
616: (ワッチョイ a935-GKXO) 2020/08/09(日)19:45 ID:En2E3W9T0(3/3) AAS
[スクレイピングのためのNokogiri利用メモ - それはそれ、これはこれ](外部リンク:otn.hatenablog.jp

クラス構造の理解:Nokogiri
617: (オッペケ Sr5d-f2iR) 2020/08/09(日)20:05 ID:CEZ97NChr(1) AAS
KernelにArrayメソッドがあるのと似たようなもんだな
618: (ワッチョイ 594e-cUya) 2020/08/09(日)22:21 ID:sb6ynJ/q0(1) AAS
>>610
勘のいいガキは嫌い
619
(1): (ワッチョイ ebbb-VtC7) 2020/08/09(日)23:52 ID:wetuPPrU0(1) AAS
Railsがマイクロサービスが流行って廃れたようなことを言う人もいるけどさ
サーバ側でセッション情報を保持しないのが主流になった時点でもう、重量級フレームワークは終わりだったんじゃないのかな
620
(1): (ワッチョイ a935-GKXO) 2020/08/11(火)07:39 ID:a9fFSUGp0(1/3) AAS
>>614
NokogiriのRDocを見てます。
Nodeオブジェクトの
content, text, inner_text, to_str
メソッドは、みな同じって事ですかねぇ?

to_str以外、試してみたら同じ文字列が返って来ます。
to_strは後で試してみます。
621: (ワッチョイ a935-GKXO) 2020/08/11(火)08:03 ID:a9fFSUGp0(2/3) AAS
>>619
じゃぁ、Session情報はどこに保存?
622
(1): (ワッチョイ 9301-X9Sf) 2020/08/11(火)11:44 ID:giB5l2E50(1) AAS
>>620
aliasなのでみんな同じ
外部リンク[rb]:github.com

ドキュメントにはalias書いてなくて不親切だね
623: (ワッチョイ a935-GKXO) 2020/08/11(火)12:51 ID:a9fFSUGp0(3/3) AAS
>>622
great thx!
624: (ワッチョイ 6961-747+) 2020/08/11(火)16:35 ID:pA06ApZK0(1) AAS
>>610
JSの方が、ブロックが楽に書けるし、数値の0がfalseの意味を持っているので分かり易いし、複数行コメントに /*・・・*/ が使えて便利だし、
if 文の条件式を ()で囲むし、単一行コメントが // だし、Cと似ている。
625: (アメ MM75-cUya) 2020/08/11(火)16:52 ID:nNWMPbxDM(1) AAS
if文の()?正直いらねえわ。
goみたいになくしてほしい。
if()単文;で書けて嬉しいことなんてほとんどないし。
626: (アウアウエー Sa23-e++8) 2020/08/11(火)20:23 ID:Uga1WByLa(1) AAS
自動的に if then else end に展開するスクリプトを書けば
問題解決じゃないの?
627: (ワッチョイ e52c-dj0b) 2020/08/12(水)01:36 ID:UVmFgkue0(1/4) AAS
JavaScript, PHP, Python は、各型に偽があるので、10個ぐらいあって大変。
0, 0.0, 空文字列、空配列、空辞書とか

Ruby では、nil, false だけが偽だから、変数の型を考えなくて済む。
各型が偽になる条件を考えるのは、苦痛

確か、Rails には、そういう関数があったかも知れない
628: (ワッチョイ 4d61-CWhB) 2020/08/12(水)02:44 ID:2N2Ra+Iw0(1/3) AAS
しかし、コンピュータは、ロジック回路や電卓の時代から、0が偽で、1が真と
決められ、TTL-ICでも、NAND, NOR,AND,OR,NOTのどれもがその規則に
従っていた。
アセンブラやマシン語でもそれが踏襲され、1 and 1 = 1, 1 and 0 = 0となる。
とこが、Rubyだけは、1 and 0 = 1 というような変なことになる。
これは受け入れがたい。
こういうコンピュータの基礎を無視するようなことしてるのは困る。
629
(2): (ワッチョイ 2e63-cv7i) 2020/08/12(水)02:52 ID:02pnoruX0(1) AAS
rubyの0はメモリに何も入ってないのを表すんじゃなくてNumericクラスのインスタンス
何かのインスタンスなんだから真なのは自然
rubyの全てオブジェクトという基礎を無視するのは困る
630: (ワッチョイ 4d61-CWhB) 2020/08/12(水)03:08 ID:2N2Ra+Iw0(2/3) AAS
>>629
しかしそれ自体が、コンピュータの基礎とかけ離れた設計思想になっている。
コンピュータの世界では、非常に古くから0が偽であると定義されている。
631: (ワッチョイ 4d61-CWhB) 2020/08/12(水)03:12 ID:2N2Ra+Iw0(3/3) AAS
数学の世界でも、真理値表では、0が偽、1が真。
andを「論理積」というのは、andを掛け算(つまり「積」)に置き換えてみると
結果が同じになり、
orを「論理和」というのも、足し算を「飽和演算」とする場合に、足し算に
置き換えられるからで、
それらは、0を偽とした場合にのみ成り立つ。
0も1も真としてしまっては、これら、論理積、論理和という言葉の定義すら
省1
632: (ワッチョイ 7133-UdbQ) 2020/08/12(水)04:29 ID:RMBTHnXK0(1/4) AAS
>>629
だったら、偽なのはfalseだけにしとけよと思う。
真偽値でなければならないところは真偽式しか書けないようにしとけと。

微妙にいいかげんなんだよな。
633: (ワッチョイ 468c-/3LZ) 2020/08/12(水)05:16 ID:pHDlYbYE0(1) AAS
いやいや、そもそも0や1が真になるのがおかしい
if 0 then 〜 はエラーにすべきだろう
634: (ワッチョイ ed35-ZVh2) 2020/08/12(水)07:16 ID:MEC6nwIV0(1/2) AAS
俺は、Rubyではnil, falseだけが偽とする。0を偽としないって設計は好きだな。

Conventionalな考え方とは異なるってのも別に良いじゃん。
そんなConventionalな、つまり従来の考え方を踏襲しない言語なんて一杯あるし。

これが気に入らんのは、Kotlinでfunで関数定義するやつ。
635
(1): (ワッチョイ 454e-/dLM) 2020/08/12(水)07:25 ID:q4xTlvo30(1) AAS
まあ一番基本的であろうdefで作った関数(ほんとは関数じゃないというのは置いといて)が第一級市民(オブジェクトと言うと誤解を招くので)として扱われない仕様には若干古くささを感じる。
JSどころかPythonですらできるのに…
引数ゼロで呼び出しかかっちゃうんだよなぁ…
()省略文法の弊害。
今思えば必須でよかったんじゃないか?()くらい
636: (ワッチョイ e52c-dj0b) 2020/08/12(水)08:00 ID:UVmFgkue0(2/4) AAS
Ruby では、関数・ブロック(クロージャ)の2つのスコープがある。
2つないと、バグりやすい

関数は、クロージャと違って、スコープが厳しい。
C と同じで、外側の変数を通さないから、バグが少ない

Go も、Rubyを見習ったし、
JavaScript も、新たなスコープを作った
637
(1): (ブーイモ MM85-bVkb) 2020/08/12(水)08:34 ID:lEc3olaBM(1) AAS
老害の極み
1 and 0 なんてコードを書こうとするほうがどうかしてる
638: (ワッチョイ ed35-ZVh2) 2020/08/12(水)08:38 ID:MEC6nwIV0(2/2) AAS
>>637
そのとおり!

いつまでも、0が偽であるべき!
なんて考えに取り憑かれているべきでは無い。

ちなみに、俺、56歳ね!
639: (アメ MM55-/dLM) 2020/08/12(水)08:49 ID:1xAI9U35M(1) AAS
ぶっちゃけ今どきるびぃみたいな型なしクソ言語にしがみついてるやつらが老害だけどなw
640: (テテンテンテン MM26-ocCp) 2020/08/12(水)09:10 ID:fvB0TNCqM(1) AAS
>>635
オブジェクト指向原理主義的には、メソッドはオブジェクトに対してメッセージを送信した結果生じるオブジェクトの「反応」なんだよ
そこは完全にオブジェクト側に任されていて、オブジェクト自体がRubyの仮想マシン上でどう実装されてるかすらも呼び出し側が期待するべきではないの
JavaScriptだとオブジェクトが単なる連想配列であるという前提のもとでそこからメソッドを引っ張り出して呼び出すわけだけど、それはある意味オブジェクトのカプセル化を破っているというわけ
そういう思想的背景を理解すれば、Rubyのメソッドが第一級関数ではない理由は君にも納得できるんじゃないかな
まあその思想に拘ることにどれだけ実用的意義があるかは別問題で、俺もRubyが時代遅れだというのは同意するけどね
641: (アウアウウー Saa5-Z0Eo) 2020/08/12(水)09:42 ID:/4eCUYwNa(1) AAS
これ本当なのですか?

Ruby on Rails では、サーバー側がRubyで、
クライアント側が、React + Bootstrap も多いけど、

サーバー側をJavaScript(JS), Node.js にすれば、
言語が1つになるので、開発が楽になると主張する人もいるけど、

あまりに、JSは巨大だから、かえって難しくなる

だから、Rails では、Node.js, Webpack, Babel をコンパイルツールとして使っているだけ
642: (アウアウウー Saa5-ocCp) 2020/08/12(水)09:55 ID:sCXl4KJWa(1) AAS
> あまりに、JSは巨大だから、かえって難しくなる
ここが飛躍していて意味不明である
RailsはサーバーサイドだけであってもJSよりRubyで書いた方が簡単だと思っている奴が使うためのフレームワークであり、それに正しいもクソもない
そう思う奴が少なければ自然に廃れるだけだし、事実廃れている
643
(1): (ワッチョイ e52c-dj0b) 2020/08/12(水)10:22 ID:UVmFgkue0(3/4) AAS
JS は最近まで、基本型であるハッシュも無かった

皆、オブジェクトをハッシュの代わりに使っていたけど、
__proto__ という属性名を使うと、バグってしまう

こういう事も知ってる香具師は、まずいない。
標準機能が少なくて、自作すると、様々な引掛けに掛かってしまう

var myObj = { };
str = 'abc';
省5
644: (ワッチョイ aebb-jUmA) 2020/08/12(水)10:28 ID:0iqLL9pv0(1) AAS
Railsは、PHP全盛期に誰が使っても大穴が開かないから人気があっただけでさ
Node.js等に優秀なフレームワークが出そろった今ではもう、使う価値はほとんどないよ・・・・
645: (ワッチョイ 7133-UdbQ) 2020/08/12(水)12:33 ID:RMBTHnXK0(2/4) AAS
>>643
あらさがしもいいとこ。
識別子に「__」を混ぜるヤツなんかそうそういねえ。
646: 643 (ワッチョイ e52c-dj0b) 2020/08/12(水)12:51 ID:UVmFgkue0(4/4) AAS
使っている単語を集めるアプリで、__proto__ が使われていたら、バグる

Haxe では、この仕様を回避するために、すべての属性名の先頭に、@ を付けていた。
@abc, @__proto__ みたいにする

でも、__proto__ も、ブラウザが慣習として使っているだけのもので、
規格で決まっているわけでもないので、変わるかも知れない

もし変わったら、突然アプリがバグってしまう

各社が、勝手に決めている部分も多いから、プログラミングしにくい。
省2
647: (テテンテンテン MM26-tgXM) 2020/08/12(水)13:21 ID:/qrw2h6bM(1) AAS
標準なのかRailsの独自拡張なのかの区別すら困難なほどにRailsにクソミソに汚されたRubyの悪口はやめなさい
少なくともJSにおいては、標準ライブラリを汚すような行儀の悪いライブラリが広く一般的に使用されたりはしていない
648: (オッペケ Srf1-wvIG) 2020/08/12(水)13:25 ID:kGuev0jHr(1) AAS
TSでいいじゃない 人間だもの
649: (ワッチョイ 8201-FRDO) 2020/08/12(水)14:24 ID:HozojyCs0(1) AAS
暑くなるとどのスレにも変なのが湧くね
知ってて批評する分にはいいけど知ったか批評しかなく中身がない
650
(3): (ブーイモ MMb6-bVkb) 2020/08/12(水)15:43 ID:8Nm8vDB1M(1) AAS
unixの世界では0がtrue、1を含むそれ以外がfalse。

慣習よりも実益が上回るなら、慣習に従う必要なんてない。

Swift、Kotlin、Go、Rustらのメジャーな新言語で0や1をそのまま真偽値として使える言語は一つとしてないのは、JSのtruthy/falsyはバグの温床だから。
651
(3): ◆QZaw55cn4c (NZ 0H8a-nBdZ) 2020/08/12(水)17:03 ID:UG+oufucH(1/2) AAS
>>650
それはシェルが扱う「プログラムの」返値のときで、しかも意味は 0 が正常終了、1 が非正常終了、と、ちょっと違う
652
(1): (ワッチョイ 7133-UdbQ) 2020/08/12(水)17:41 ID:RMBTHnXK0(3/4) AAS
>>651
testコマンドでは、0が真、それ以外が偽。

>>650が「unixの世界」とか言ったからややこしいけど、シェルだけの話でもない。
653
(1): ◆QZaw55cn4c (NZ 0H8a-nBdZ) 2020/08/12(水)17:54 ID:UG+oufucH(2/2) AAS
>>652
test コマンドの実体が外部の実行ファイルなら、それは >>651 のいうところの「プログラムの返値」‥‥?
test コマンドがシェルの内部に埋め込まれている場合もある(例えば bash)‥‥?

??いずれの場合も「シェルの話」なのでは?
654: (ワッチョイ 7133-UdbQ) 2020/08/12(水)18:29 ID:RMBTHnXK0(4/4) AAS
>>653
「終了」だけの話じゃないから。
655
(1): (ワイーワ2 FF8a-jwrZ) 2020/08/13(木)10:20 ID:m1xh97jBF(1) AAS
>>651
unix とか shell とか C の関数とか
戻り値の扱いが統一されてないのは不自然だよね
656: (ワッチョイ 7133-UdbQ) 2020/08/13(木)11:02 ID:HLH3bdVq0(1) AAS
>>655
コマンドの終了コードは真偽の2値だけじゃないから。
わかりにくいといえばそうだが、しかたない。
657: (ワッチョイ 4d61-CWhB) 2020/08/13(木)11:27 ID:+ydphYXd0(1) AAS
>>650
それは真偽値じゃなく、0が成功、0以外がエラーで、番号でエラーの種類を表しているだけ。
Unixでは、誕生の時から、Cと二人三脚だったが、Cはもともと1が真、0が偽だった
わけだから、Unixも当然、1が真、0が偽。
エラー番号は、真偽値とは直接関係が無く、Unixとは関係ないMS-DOSや
PC-8801のアセンブラの世界でも、0が成功、0以外でエラーの種類を表すことが
多かった。なぜかといえば、それが効率が良かったから。
省2
658: (ワッチョイ dd5f-XQXO) 2020/08/13(木)19:09 ID:Tr7DEHMo0(1/2) AAS
dllでchar* hoge(){

}
659: (ワッチョイ dd5f-XQXO) 2020/08/13(木)19:11 ID:Tr7DEHMo0(2/2) AAS
dllで
char* hoge(){
return msg;
}
ってやったのをrubyではどうやってうけとればいいんですか?
お願いします
660: (ワッチョイ e52c-178q) 2020/08/14(金)05:15 ID:SCMnTycc0(1/2) AAS
「ruby dll 呼び出し」で検索すれば?

ただ、Windows 用にコンパイルしても、正常に動くかな?
661: (アウウィフ FFa5-jwrZ) 2020/08/14(金)15:59 ID:XKPWE/tlF(1) AAS
ffi
662
(1): (ワッチョイ dd5f-XQXO) 2020/08/14(金)16:44 ID:MuRP3aMr0(1/16) AAS
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "D:./myruby.dll"
extern "char* gethoge()"
end
ss = M.gethoge
省2
663: (ワッチョイ 7133-UdbQ) 2020/08/14(金)17:05 ID:B0hSR/wp0(1) AAS
文字コードが違うんやろ。
変換すれば。
664: (ワッチョイ dd5f-XQXO) 2020/08/14(金)17:27 ID:MuRP3aMr0(2/16) AAS
変換のしかたがわからないのです
665: (ワッチョイ dd5f-XQXO) 2020/08/14(金)17:28 ID:MuRP3aMr0(3/16) AAS
dllはshiftjisです
666: (ワッチョイ dd5f-XQXO) 2020/08/14(金)17:30 ID:MuRP3aMr0(4/16) AAS
`require': cannot load such file -- ffi
667: (ワッチョイ 1e7d-yoZq) 2020/08/14(金)17:44 ID:cCFmHkiX0(1/4) AAS
>>662
ss = M.gethoge.force_encoding( Encoding::CP932 )
668: (エムゾネ FF62-jwrZ) 2020/08/14(金)18:18 ID:zY2s9ydfF(1) AAS
ruby -Ks
669: (ワッチョイ dd5f-XQXO) 2020/08/14(金)18:24 ID:MuRP3aMr0(5/16) AAS
一通りやったのに問題解決しませんでした、諦めました
どうもありがとうございました
670: (オッペケ Srf1-wvIG) 2020/08/14(金)18:35 ID:5nafUaAcr(1/3) AAS
dllがShift-JISでrubyがUTF-8でターミナルがWindows-32Jとかなんじゃねえの
情報を小出しにされたんじゃわかるわけない
671: (ワッチョイ dd5f-XQXO) 2020/08/14(金)18:40 ID:MuRP3aMr0(6/16) AAS
それです
ターミナルがよくわかりません
672: (ワッチョイ dd5f-XQXO) 2020/08/14(金)18:42 ID:MuRP3aMr0(7/16) AAS
ターミナルはshiftjisでした
673: (オッペケ Srf1-wvIG) 2020/08/14(金)18:58 ID:5nafUaAcr(2/3) AAS
そもそも本当に文字化けなのか?
想定する文字列と
p ss
した結果は?
674: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:03 ID:MuRP3aMr0(8/16) AAS
#<Fiddle::Pointer:0x000000000313e7d0 ptr=0x00007ffea5c03038 size=0 free=0x0000000000000000>
675: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:04 ID:MuRP3aMr0(9/16) AAS
require 'fiddle/import'

module M
extend Fiddle::Importer
dlload "D:./myruby.dll"
extern "char* gethoge()"
end

p M.gethoge
省1
676: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:06 ID:MuRP3aMr0(10/16) AAS
想定する文字列は「こんにちは!」です
677
(1): (ワッチョイ 1e7d-yoZq) 2020/08/14(金)19:07 ID:cCFmHkiX0(2/4) AAS
p M.gethoge.encoding
678: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:08 ID:MuRP3aMr0(11/16) AAS
puts M.gethoge
だと
S0�0k0a0o0�
679: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:10 ID:MuRP3aMr0(12/16) AAS
>>677
undefined method `encoding' for #<Fiddle::Pointer:0x0000000002c42230> (NoMethodError)
680
(1): (ワッチョイ 1e7d-yoZq) 2020/08/14(金)19:16 ID:cCFmHkiX0(3/4) AAS
p M.gethoge.to_s.encoding
681: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:19 ID:MuRP3aMr0(13/16) AAS
>>680
#<Encoding:ASCII-8BIT>
682: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:21 ID:MuRP3aMr0(14/16) AAS
#include <stdio.h>

char name[] = "こんにちは!";

extern "C" __declspec(dllexport) char* __stdcall gethoge() {
return name;
}

dll側です
683
(1): (ワッチョイ 1e7d-yoZq) 2020/08/14(金)19:28 ID:cCFmHkiX0(4/4) AAS
puts M.gethoge.to_s.force_encoding( Encoding::CP932 )
684: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:29 ID:MuRP3aMr0(15/16) AAS
>>683
お!出ました!
ありがとうございました
助かりました
685
(1): (オッペケ Srf1-wvIG) 2020/08/14(金)19:38 ID:5nafUaAcr(3/3) AAS
hoge.dllコンパイルしてたら解決してた
良かったね
686: (ワッチョイ dd5f-XQXO) 2020/08/14(金)19:58 ID:MuRP3aMr0(16/16) AAS
>>685
ありがとうございました
687
(3): (ワッチョイ e52c-178q) 2020/08/14(金)22:28 ID:SCMnTycc0(2/2) AAS
Windows で、Ruby を使うのは、CP932 で苦しむ。
ちょっとした処理でも、外部・CP932 → Ruby内部・UTF-8 → 外部・CP932

クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
省3
688
(1): (ワッチョイ 8201-FRDO) 2020/08/14(金)23:58 ID:sxmwfi0L0(1) AAS
>>687
スクリプト/内部/外部のエンコーディングをCP932にすれば
CP932 -> UTF8とUTF8 -> CP932の変換や指定は不要
689
(3): (ワッチョイ 9d6a-2ych) 2020/08/18(火)19:07 ID:7fbjefcm0(1/2) AAS
mechanizeのform送信を使って5chに書きこむことはできますか?

textareaにvalue値を入れ、submitし、承諾しますか?の画面まで行けたのですが、そこから同じようにsubmitしてもページ遷移が起こらずそのままみたいです
690
(1): (オッペケ Srf1-wvIG) 2020/08/18(火)19:31 ID:AGh/qXAtr(1) AAS
>>689
cookie
691: (ワッチョイ 9d6a-2ych) 2020/08/18(火)19:53 ID:7fbjefcm0(2/2) AAS
>>690
具体的にcoockieをどうすれば良いでしょうか?
692: (エムゾネ FF62-jwrZ) 2020/08/18(火)20:08 ID:h5vNCvfYF(1) AAS
hanamogera
tepodon
693: (ワッチョイ 6285-UC6e) 2020/08/18(火)21:43 ID:HR/M/dGq0(1) AAS
>>687
>Windows で、Ruby を使うのは、CP932 で苦しむ。
>ちょっとした処理でも、外部・CP932 → Ruby内部・UTF-8 → 外部・CP932

Rubyを生半可に知ったつもりの人にありがちな勘違いだな
まず、多言語化に対応した多くのプログラミング言語は、
内部エンコーディングとしてUTF-8を採用している、ここまでは間違いではない
しかしながらRubyは内部エンコーディングとして特定のエンコーディングを採用せず、
省15
1-
あと 309 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.023s