From: Nobuyoshi Nakada Date: 2014-07-12T22:26:53+09:00 Subject: [ruby-list:49874] Re: Rubyへの要望(願望) (2014/07/12 21:22), MASAKI Yuhsuke wrote: > Hi Yukihiro Matsumoto , this is MASAKI Yuhsuke. > I reply for your mail on Sat, 12 Jul 2014 15:20:37 +0900. >> continue節はPythonにあるものと同じものを期待してらっしゃるの >> でしょうか。面白いアイディアだと思って昔から考えているのです >> が、難点はRubyの場合、ループなどはブロックを使うことを推奨し >> ており、continue節の導入が正当に意味づけしづらいところです。 >> 同様の理由で3 part forも賛成しにくいです。むしろもっとブロッ >> クを使って欲しいところです。 >> > whileを使うことはほとんどないのですが、可能であればむしろブロックにcontinue節が欲しいくらいです。 > something do > # main > continue > # continue > end > さらにいえばこれをやるならば、ブロックにrescueやensureやelseをつけられるようにしてほしいとも思います。 「ブロックにrescueやensureやelse」という提案もすでにありますが、 do...end の場合はともかく {...} では見た目上違和感が大きいという問題も あります。 > 優先度のアクセサは > String.encoding_priority > String.encoding_priority= > とか。そして、その機能がつけばguessを入れ替えるか、もしくは > String#full_guess > とか。さらには#force_encodeを使いたいのですが、これも名前問題がありそうなので、 > String#auto_convert(encode) > でしょうか。 試しにgemとして実装してみてはどうでしょうか。 > 実際に遭遇したケースとしては、文字列のエスケープ処理と、文字列のエスケープ処理通過指示(verb)で、 > 通常のメソッドの形でなくsymbolを使うことでスッキリみせたい、というのがありました。 > つまり、 > ^ "Hello" > のように書きたかったのですが、^インスタンスメソッドを定義した上でinstance_evalを呼んでもself.^を読んでくれないため、そうなりません。 > 記号が残っていない、というのは感じますが、DSLではもうちょっと書き方に自由度が欲しいな、と思うことがちょくちょくあります。 > Ruby組み込みでない(DSL処理スクリプトが処理前に展開する)マクロを書いてしまえばいいのかな、 > とは思いますけれど、それもなんだか嬉しくない気がして。 ^は単項演算子にはないのでできませんが、+や~、!、~ならStringのメソッドを refinementsで上書きすることはできます。 >> |# Kernel.syscallにStringを渡せるようにしてほしい >> 「まんま」といわれてもちょっとわからないのですが、syscallでシ >> ステムコールの指定を番号ではなく文字列で指定したいということ >> でしょうか。 >> > これも、mkfifoを楽にするために欲しいな、と思ったことですね。おっしゃるとおり、システムコール名で指定したいのです。 > 他のプラットフォームについて充分に調べられなかったため、syscallを数値で指定すると移植性に影響がでそうだ、と思いまして。 mkfifoだけでしたら、ずばりmkfifoというgemもあるようです。 >> |# next/redo/breakのターゲットを明示できるようにする >> ちょっとよくわかりませんでした。 >> > 次のようなケースです。 Javaのラベルと同じようなものですよね。 記法についてなにかアイディアがありますでしょうか。 > Kernel.`って文字列しかとりませんよね?argをArrayで渡したいということなのですが… > 名称は、ベタにKernel.cmdか、あるいは分かりにくいですけど、Kernel.csubとか? とりあえず IO.popen(cmd, &:read) ではどうでしょうか。 ちなみにIO.popenのデフォルトのモードは読み込み専用です。 > では、パーサが大変になりそうですが、 > obj ->method(arg) ->はlambdaで使用されています。 > かぶりをさけるなら > obj <-method(arg) > のほうがマシでしょうか。 それは obj < -method(arg) という比較式と解釈されているので、互換性の問 題があります。 > #Object.remove_module > prependがあるのならば、モジュールを外すことができれば、一時的にメソッドを書き換えるようなことは > スマートかつ容易に行えるように思えます。 refinementsはどうでしょうか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦