rurema / doctree Goto Github PK
View Code? Open in Web Editor NEWRepository of Japanese Ruby reference manual
Home Page: https://docs.ruby-lang.org/ja/
Repository of Japanese Ruby reference manual
Home Page: https://docs.ruby-lang.org/ja/
Rubyリファレンスマニュアル刷新計画 README ========================================= See: https://github.com/rurema/doctree/wiki
refinements機能はRuby 2.0.0で仮導入され、Ruby2.1.0で本採用された機能であるため、警告が表示されるのはRuby 2.0.0の場合だけだと思っております。ですが、Ruby2.1.0のリファレンスを見るとrefineメソッドに次のような記載があります。
[注意] refinements は 2.0 現在、実験的な機能として提供されています。以 降のバージョンで仕様が変更になる可能性があります。使用すると必ず警告が 表示されます。
Ruby 2.1.0での実際の動作は確認できていないのですが、もし2.1.0以降で警告が出ないようであれば、上記記述を@SInCE 2.1.0で非表示にしていただければと思います。
2.1 では $SAFE=4 is obsolete
になっているのに
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fsafelevel.html
は昔の記述のままになっています。
同じページなので、ついでに書いてしまいますが「セーフレベルに関するその他の詳細」に * カレントディレクトリを $: に加えない
とありますが、これはセーフレベルに関係なく入らなくなっているはずです。(いつのバージョンからかは調べていません。)
例
とklass
のところで、バージョンごとに細かな違いを見つけました。
以下のversionで試しました。
puts "\n"
p [RUBY_VERSION, RUBY_PATCHLEVEL]
set_trace_func lambda {|*arg|
p arg
}
class Foo
end
43.to_s
を実行すると1.8と1.9と2.0以上で微妙に挙動が異なります。
1.8.7では
["line", "trace.rb", 6, nil, #<Binding:0x7f6256248500>, false]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x7f6256248280>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x7f6256248208>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x7f6256247e48>, false]
["end", "trace.rb", 6, nil, nil, false]
["line", "trace.rb", 8, nil, #<Binding:0x7f6256247c18>, false]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x7f6256247a38>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x7f62562476a0>, Fixnum]
これは今のマニュアルどおりです。
1.9.2と1.9.3になると
["c-return", "trace.rb", 5, :set_trace_func, #<Binding:0x000000015fa1d0>, Kernel]
["line", "trace.rb", 6, nil, #<Binding:0x000000015f9fc8>, nil]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x000000015f9dc0>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x000000015f9be0>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x000000015f9a00>, nil]
["end", "trace.rb", 7, nil, #<Binding:0x000000015f9820>, nil]
["line", "trace.rb", 8, nil, #<Binding:0x000000015f9668>, nil]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x000000015f94b0>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x000000015f92a8>, Fixnum]
のように、
line
class
end
のときklass
はnil
になったc-return
イベントとして扱われるようになった2.0.0以上になるとset_trace_func
の評価が変化して
["c-return", "trace.rb", 3, :set_trace_func, #<Binding:0x00000001addc10>, Kernel]
となります。5行目から3行目へと、line
が変化します。
パッチを作る上でご相談が2点あります。
#@since 1.8.7
["line", "trace.rb", 6, nil, #<Binding:0x7f6256248500>, false]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x7f6256248280>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x7f6256248208>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x7f6256247e48>, false]
["end", "trace.rb", 6, nil, nil, false]
["line", "trace.rb", 8, nil, #<Binding:0x7f6256247c18>, false]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x7f6256247a38>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x7f62562476a0>, Fixnum]
#@end
# => 1.8.7とそれ以降では例を全て変える必要あり
#@since 1.9.2
["c-return", "trace.rb", 5, :set_trace_func, #<Binding:0x000000015fa1d0>, Kernel]
#@since 2.0.0
["c-return", "trace.rb", 3, :set_trace_func, #<Binding:0x00000001addc10>, Kernel]
#@end
["line", "trace.rb", 6, nil, #<Binding:0x000000015f9fc8>, nil]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x000000015f9dc0>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x000000015f9be0>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x000000015f9a00>, nil]
["end", "trace.rb", 7, nil, #<Binding:0x000000015f9820>, nil]
["line", "trace.rb", 8, nil, #<Binding:0x000000015f9668>, nil]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x000000015f94b0>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x000000015f92a8>, Fixnum]
#@end
# => 1.9.2とそれ以降では一行目だけ変える必要あり
ではだめですよね :)
うまく分岐させる方法があったら教えてください。
printf フォーマットに 1.9.1 から追加された%<>、%{} を追記する。
For more complex formatting, Ruby supports a reference by name.
%<name>s style uses format style, but %{name} style doesn't.
Exapmles:
sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
#=> 1 : 2.000000
sprintf("%{foo}f", { :foo => 1 })
# => "1f"
http://docs.ruby-lang.org/ja/2.1.0/class/BasicObject.html で 例 例になっている記述の 2 つめの例を削除する。
ブロック付きの gsub の置き換えなし版が scan になるので、説明か @see
を追加すると良いのではないでしょうか。
docs.ruby-lang.orgには今のところ2.1.0版しかないようですが、今からRubyを始める人は2.1.1を入れると思うので、「リファレンスがない」と思われるのではないかとちょっと気になりました。
2.1.1や、今後出る2.1.2, 2.1.3などについても項目を用意する。
docs.ruby-lang.orgのリンクを、"2.1.0" ではなく "2.1.x" という記述に変更する。
個人的には案2でよいような気がします(従来もパッチレベル単位のドキュメントは用意してなかったですし)。
nonzero?
の説明に rdoc と同じように nonzero? ||
の例があると良いのではないでしょうか。
rdoc:http://www.ruby-doc.org/core-2.1.0/Numeric.html#method-i-nonzero-3F
るりま:http://docs.ruby-lang.org/ja/2.1.0/class/Numeric.html#I_NONZERO--3F
以下が 1.9 以降でも表示されてしまっているので表示しないようにする。
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2feval.html
クラス定義文の評価値を得ることはできません。
次の記事の「モジュール定義文」と同じく、「最後に評価した本体の式の値」ではないですか?
書式についても、次の記事の「モジュール定義文」の方は「本体」と書かれていますが、
クラス定義文の方は「式」と書かれているのも気になります。
一方、もし同名のクラスがすでにある場合はそれを使います。
そのときスーパー クラス式が指定されており、その結果と得たクラスのスーパークラスが
(equal? において) 違うときは新しいクラスを生成します。
これはどういう意味でしょうか?
class C1; end
class C2; end
class S < C1; end
class S < C2; end
こういうコードのことを言っているのでしょうか?
http://docs.ruby-lang.org/ja/2.0.0/class/Array.html
に「select!」は載っていて「select」が載っていないのはなぜでしょうか。
uniq!やsort!はuniq、sortもあります。
sort_byも同様ですね。
何か勘違いしていたり、既出でしたらすいません。
b8cde3c 現在、残り作業は以下です。
=== Core classes updates (outstanding ones only)
* Process
* Extended method:
* Process execution methods such as Process.spawn opens the file in write
mode for redirect from [:out, :err].
=== Core classes compatibility issues (excluding feature bug fixes)
* Proc
* incompatible changes:
* ArgumentError is no longer raised when lambda Proc is passed as a
block, and the number of yielded arguments does not match the formal
arguments of the lambda, if just an array is yielded and its length
matches.
* Process
* Process execution methods such as Process.spawn opens the file in write
mode for redirect from [:out, :err].
Before Ruby 2.2, it was opened in read mode.
=== Stdlib updates (outstanding ones only)
* Rake
* Updated to Rake 10.4.0. For full release notes see:
http://docs.seattlerb.org/rake/History_rdoc.html#label-10.4.0
* RubyGems
* Updated to RubyGems 2.4.2. For full release notes see:
http://docs.seattlerb.org/rubygems/History_txt.html#label-2.4.2+%2F+2014-10-01
* XMLRPC
* Added new parser class named LibXMLStreamParser.
=== Stdlib compatibility issues (excluding feature bug fixes)
* time.rb
* Time.parse, Time.strptime, Time.rfc2822, Time.xmlschema may produce
fixed-offset Time objects.
It is happen when usual localtime doesn't preserve the offset from UTC.
* Time.httpdate produces always UTC Time object.
* Time.strptime raises ArgumentError when no date information.
=== C API updates
* すべて
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2feval.html
メソッド定義文の値は nil です。
特異メソッド定義文の評価値は nil です。
シンボルが返ってくるようです。
最近変わったんでしたっけ。
あと、項目名は「特異メソッド定義式」なのに、
文章では「特異メソッド定義文」になっています。
1.9 からの thread.c の実装だと nil は返らなくなってるようです。
1.8 でも thread.rb ではるりまの記述のような動きに見えますが、Mutex.new.unlock くらいしかしていませんが、実行してみると thread.c の方の Mutex の動きに見えました(1.8 でも ThreadError でした)。そちらも見ると大変そうなので、1.9 以降の Mutex#unlock の戻り値の修正だけします。
rdocには引数について説明がありますが、るりまのほうにはありません。
http://docs.ruby-lang.org/ja/2.2.0/method/Module/i/class_variables.html
http://www.ruby-doc.org/core-2.2.0/Module.html#method-i-class_variables
Numeric#quo の例で
1.quo(3.0) #=> (1/3)
となっていますが,Ruby 2.1 から Float を返すようになったみたいです。
symref.rd の「()」(丸括弧)のところで、「例の内側のカッコ」「例の外側のカッコ」とありますが、例は (true and false) とだけあり、外側のカッコに相当する例がないように見受けられます。
この二つのインスタンスメソッドはどちらもC言語でRangeに実装されています。
しかし、現在docがありません。
なにか事情があるのでしょうか?
なおArrayの場合はdocに記述があります。
http://docs.ruby-lang.org/ja/2.1.0/class/Range.html
http://docs.ruby-lang.org/ja/2.1.0/class/Array.html#I_INSPECT
必要であれば以下に対応する。
Ruby 2.2.0 のlibrary fiddleの「dl」へのリンク(2箇所)がデッドリンクになっています。
自分の環境で再現しないのでもう直ったのかもしれないのですが、以下などを見かけるためIssueを発行しておきます。新しい方を見かけなければcloseします。
GitHubに来たからいいのかもしれないのですが、いつの間にか終わってるらしいので Wiki も持って来たほうがいいかもしれませんね。
なんかこないだからしれっとアナウンスなしで影響を受けてるような...うーむ...
s/典型^な/典型的な/ します。旧リファレンスで既に現在のようになっていました。
「RubyのStructのイディオムとアンドキュメンテッドな機能」という記事でStruct.new時にメソッド定義を出来ることがアンドキュメンテッドと記載されていました。
http://docs.ruby-lang.org/ja/2.1.0/method/Kernel/m/eval.html と http://docs.ruby-lang.org/ja/2.1.0/method/BasicObject/i/instance_eval.html にはそれぞれへのリンクと http://docs.ruby-lang.org/ja/2.1.0/method/Module/i/module_eval.html へのリンクが SEE_ALSO にあるのに module_eval (class_eval) からは instance_eval へのリンクだけで eval へのリンクがありません。
https://bugs.ruby-lang.org/issues/8832#note-10 より。(curses と date も 1.9.1 未対応と思うため追加)
Kernel#instance_eval yields the receiver.
Kernel#exec
Kernel#spawn
Kernel#system
Kernel#(
...`)
..etc.
On Windows, the current directory is no longer implicitly
prepended to the default command search path, just like other
platforms.
標準ライブラリは以下が未対応のようです。大体は 1.9.1 相当なのではないかと思います。(こちらは丸ごと非対応なので 1 行のみにしました)
https://bugs.ruby-lang.org/issues/8832#note-10 より。
2.0.0 の NEWS 分は以下でした。
1.8.7 がサポート終了のため、対応が終わってないものの 1.9 から外れている以下などのライブラリについては ASSIGN.low で対象外の旨を STATUS に追記したいです。
deprecated とか unbundled などどうでしょうか?
# LIBRARY_NAME OWNER STATUS
#---------------------------------------------------------
Win32API deprecated
bigdecimal sho-h done
"与えられた関数名の最初の文字が大文字なら、 定義されるメソッド名の最初の文字は小文字になります。" の部分が合ってるかわからないみたいです。これは1.9時代の名残とかだったりするんでしょうか?
なお、試されたのは以下のコードのようでした。
require "fiddle"
module X
extend Fiddle::Importer
dlload "kernel32"
extern "void CloseHandle()"
end
...
http://docs.ruby-lang.org/ja/2.1.0/method/Regexp/i/to_s.html
これは現状、後方参照を番号でしか指定できないためです。
キャプチャがあるので、この記述は古いと思います。
re = /(?<capture>foo|bar)\k<capture>/
p /(baz)#{re}/
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2feval.html
Object#instance_eval の三つだけが例外で、以下のように変更されます。
Object.instance_eval
self がそのレシーバ、class がそのレシーバの特異クラス
instance_evalメソッドの表記がクラスメソッドになっています。
あと、instance_evalメソッドが定義されているのはBasicObjectクラスなんですが、どうなんでしょう。
doctree/refm/api/src/stringio.rd
Line 34 in 8fe7856
--- open(string = '', mode = 'r+') {|io| ... } -> StringIO
動作を見る限りでは、StringIO#openにブロックを渡した場合は、StringIO(のインスタンス)ではなくブロックを評価した結果が返ってきているように思います。
% ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x64-mswin64_100]
% irb
irb(main):001:0> require "stringio"
=> true
irb(main):002:0> StringIO.open { |f| f.write "hello" }
=> 5
irb(main):003:0> StringIO.open { |f| f.write "hello"; 123 }
=> 123
irb(main):004:0> StringIO.open { |f| f.write "hello"; f }
=> #<StringIO:0x000000020db428>
irb(main):005:0>
いつからかは確認していないのですが、正規表現の中の \u{...}
という書き方では16進4桁以上のユニコード文字を指定できるようになっているようです。
ソースを見ると、6桁までいけそうです。(↓で6となっているから。)
https://github.com/ruby/ruby/blob/44a9509f2ff2be85b97ade9806857e0948c29a1b/parse.y#L5728
codepoint = scan_hex(lex_p, 6, &numlen);
ただ、今のドキュメントは \u{HHHH HHHH ....} ユニコード文字列 (\uHHHH と同じ)
と書いているので4桁までしか使えないように読めてしまいます。なので、次のように変更するのはどうでしょうか?
diff --git a/refm/doc/spec/regexp19 b/refm/doc/spec/regexp19
index 7533910..b300723 100644
--- a/refm/doc/spec/regexp19
+++ b/refm/doc/spec/regexp19
@@ -71,7 +71,7 @@
\M-x メタ (x|0x80)
\M-\C-x メタ制御文字
\uHHHH ユニコード文字 (HHHH の16進数4桁)
- \u{HHHH HHHH ....} ユニコード文字列 (\uHHHH と同じ)
+ \u{HHHHHH HHHHHH ....} ユニコード文字列 (HHHHHH の16進数6桁まで指定可能。 \u{20} などというように6桁より少ない桁でも指定可能。)
\b は文字クラス内でのみ有効な表現です。文字クラスの外では
単語の区切りを表すメタ文字列と解釈されます。
懸念点は、どのバージョンから4桁以上も書けるようになったか調べていないので、 @since
なしでこれを入れても大丈夫なのかどうかわからないところです。
私は、今日のtrunkで試しました。
% /tmp/local/bin/ruby -v -e 'p(/[\u{20}]/ =~ " ")'
ruby 2.2.0dev (2014-02-23 trunk 45151) [x86_64-linux]
0
http://docs.ruby-lang.org/ja/2.2.0/class/Prime.html#I_PRIME--3F
の Prime.prime?
の説明に
引数 value に負の数を指定した場合は常に false を返します。
とあるのですが,引数が負だと符号を変えているので, Prime.prime?(-17)
は true
になります。
&&, ||, and, or を用いた式の評価結果がどうなるかは「演算子式」の「and」「or」の項にしか書かれていないようです。
http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2foperator.html#and
http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2foperator.html#or
しかし,これでは結果の真/偽がどうなるかは分かっても,評価結果が具体的にどのようなオブジェクトになるのかが分かりません。
試した限りでは
exp1 || exp2
の評価結果は,exp1
の評価結果が真ならそれになり,偽なら exp2
の評価結果になるexp1 && exp2
の評価結果は,exp1
の評価結果が偽ならそれになり,真なら exp2
の評価結果になるようなのですが,これが Ruby の仕様なのかどうか確認できればと思います。
以下が確かにそうかなと思いました。
Range#== などを追記する際に併せて追記されたようですが、range.c でもエントリがないですし、削除していいように思います。
特になければ後で削除します。
Object クラスの !~
メソッドが目次では !
になっています。
http://docs.ruby-lang.org/ja/2.1.0/class/Object.html
原因は全然追��えていませんが、bitclust htmlfile
の処理の途中で ID(?) が Object/i.=21._builtin
のようになっていて、上記ページのページ内リンクの URL も http://docs.ruby-lang.org/ja/2.1.0/class/Object.html#I_--21
となっているので、bitclust の処理過程のどこかで ~
が抜けてしまっているのかな、という気がします。
ここに報告すべきじゃなかったらすみません。
https://bugs.ruby-lang.org/issues/8832#note-2 より。
組み込みは以下が未対応のようです。
標準ライブラリは以下が未対応のようです。
「正規表現」の「文字クラス」の「文字クラスの略記法」において,
\s 空白文字 [ \t\r\n\f]
\S 非空白文字 [^ \t\r\n\f]
となっているのですが,
p 128.times.map(&:chr).join.scan(/\s/) #=> ["\t", "\n", "\v", "\f", "\r", " "]
なので,\v
が抜けているような気がします。
cdf0c85 で一度移動されているようですが、Errno::EXXX で共通して定義されたメソッドという訳ではなく、親の SystemCallError でのみ定義してあるようです。なので、(完全に元にという訳ではないですが、) SystemCallError.=== にするのが正しいと思いました。
$ ruby -ve 'p Errno::ENOENT.method(:===)'
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux]
#<Method: Errno::ENOENT(SystemCallError).===>
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
#<Method: Errno::ENOENT(SystemCallError).===>
MatchData#[]
の self[name]
形式で,name
について「名前(シンボル) 」となっています。
http://docs.ruby-lang.org/ja/2.2.0/method/MatchData/i/=5b=5d.html
しかし,Symbol のほか,String でもいいようです。
MatchData#names
が String の配列を返すので,このことは重要です。
以下で言及されてたものですが、
2014/09/23 現在、trunk でも同様なので「1.8 以降では」でも正しいようでした。しかしもはや「1.8 は」を削ってもいいかなと思ったのでそのように修正します。
rdoc では引数をとれるという説明があるのにるりまの方には引数の説明がありません。
http://doc.ruby-lang.org/ja/2.0.0/method/ARGF=2eclass/i/gets.html
http://www.ruby-doc.org/core-2.0.0/ARGF.html#method-i-gets
正規表現のドキュメントには \x{7HHHHHHH} コードポイント値の16進数表現 (7HHHHHHH の16進数で表現)
とあるのですが、今のtrunkだと使えないみたいです。
% /tmp/local/bin/ruby -v -e '/\x{00000020}/'
ruby 2.2.0dev (2014-02-23 trunk 45151) [x86_64-linux]
-e:1: invalid hex escape
/\x{00000020}/
^
-e:1: warning: possibly useless use of a literal in void context
-e:1: syntax error, unexpected '{', expecting end-of-input
/\x{00000020}/
^
この記述は正規表現のドキュメントをリニューアルしたとき ad88ff3 に追加されたようです。たぶん、この頃は使えたのでしょうが、今は使えなくなっているようなので、 @if
を追加するなどして新しいバージョンでは隠れるようにするのはどうでしょうか?
いつから使えなくなったかは確認していないのでどう @if
を指定すればよいかは提案できないのですが。。。
How to get Random Date and Timeのコメント欄で「Random.randにRangeオブジェクトを渡す場合、数値以外も渡せるのでは?」と指摘されていました。下記のようなコードのことを指しているのだと思います。
require 'date'
today = Date.today
p Random.rand(today..(today + 10))
Nemeric#div に
div はメソッド / の呼び出しとして定義されています。
とあるのですが,「呼び出しとして定義」ってどういう意味でしょうか。素直に読むと x/y
と x.div(y)
が同じ値を返すように読めます。
しかし,
3.0.div(2) #=> 1
3.0/2 #=> 1.5
のように違っています。
1.9.3のサポートが終了しているので、こちらのページを修正したいのですが、該当箇所が分かりません。
どなたか、ご存知でしたら、教えてください。
library zlibの「@see zlib(3)」がデットリンクになっています。
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fprogram.html
値を返さない式の例
while, until, while 修飾式, until 修飾式
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fcontrol.html
while は nil を返します。
while 修飾した式は nil を返します。
until は nil を返します。
until 修飾した式は nil を返します。
「値を返さない」と「nilを返す」は大違いではないですか?
なぜなら、 http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fcontrol.html には、
値を返さない式を代入式の右辺に置くと parse error になります
と書いてあるからです。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.