vimdoc-ja-working
vimdoc-ja-working copied to clipboard
eval.txt についての質問
- 翻訳した時期が違うからでしょうが、次のように表記に差異があります。
- ==系、!=系、is、isnot (List, Dictionary について)
- "equal", "not equal", "is", "isnot" (Funcref について)
"equal" などは日本語訳で「等しい」となって消えていますので、ちょっと戸惑うかも。個人的には "equal" の方が良いと思います。どちらに合わせた方が良いでしょうか?
- また、List と Dictionary については、原文に "isnot" に相当する語句が存在しません。これは削除した方が良いと思いましたが、続けて
When using "is" or "isnot" with a |List| or a |Dictionary| リスト (|List|) や 辞書 (|Dictionary|) に対して "is" や "isnot" を使うと
と書かれているので、List や Dictionary についても "isnot" が使えるようです (実際どうなのかわかりません)。原文の方に "isnot" の加筆を PR する案件でしょうか?
List
A |List| can only be compared with a |List| and only "equal", "not equal" and "is" can be used. This compares the values of the list, recursively. Ignoring case means case is ignored when comparing item values.
リスト|List|はリストとだけ比較可能で、==系、!=系、is、isnotのみ利用できる。 これらはそれぞれのリストの値を再帰的に比較する。大文字小文字無視にすると要素を 比較するときに大文字小文字を無視する。
Dictionary
A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not equal" and "is" can be used. This compares the key/values of the |Dictionary| recursively. Ignoring case means case is ignored when comparing item values.
辞書|Dictionary|は辞書とだけ比較可能で、==系、!=系、is、isnotのみ利用できる。 これらは辞書のキー/値を再帰的に比較する。大文字小文字無視にすると要素を 比較するときに大文字小文字を無視する。
Funcref
A |Funcref| can only be compared with a |Funcref| and only "equal", "not equal", "is" and "isnot" can be used. Case is never ignored. Whether arguments or a Dictionary are bound (with a partial) matters. The Dictionaries must also be equal (or the same, in case of "is") and the arguments must be equal (or the same).
|Funcref|は|Funcref|とだけ比較可能で、"equal", "not equal", "is", "isnot" のみ 利用できる。大文字小文字は常に区別される。引数や辞書が(部分適用に)バインドされ ているかどうかも重要である。辞書も同値(あるいは "is" の場合は同一)でなければな らず、引数も同値(あるいは同一)でなければならない。
僕はその提案で良いと思いますが、より Vim script を使ってる人の意見も聞きたいです。
@thinca or @tyru どうでしょうかね?
==系、!=系、is、isnotのみ利用できる。 "equal", "not equal", "is", "isnot" のみ利用できる。
どちらがわかりやすいかと言われると前者な気がします。is
isnot
はこれら自体が演算子なので、後者は抽象的な equal
と言うワードと具体的な演算子である is
と言うワードが同列で並んでいて、少し気持ちが悪いです。
初歩的な質問で申しわけありません。 「== 系」としてあるのは、'==', '==#', '==?' が使える、 「!= 系」は同じく、'!=', '!=#', '!=?' が使えるということですよね?
そうすると、is や isnot には「系」が付いていないので、
'is' のみが利用できて、'is#', 'is?' は使えない
と受け取れます (isnot も同様)。実際そうなのでしょうか?
(Funcref は「大文字小文字は常に区別される」と書かれているので、List や Dictionary と表記を合わせようと考えたのが間違いでしたか…‥。Vim script を熟知している thinca さんや tyru さんに言葉を考えてもらうのが得策ですね。)
==系、!=系、is、isnotのみ利用できる。 "equal", "not equal", "is", "isnot" のみ利用できる。
自分も前者がいいですね。 "equal" という単語で「(参照ではなく)値が同じであること」を示されるより具体的に演算子で示してくれた方が分かりやすいかと思います。
あと @uakms さんが指摘した is, isnot には「系」が付いていない、というのもその通りで「系」が付いていた方がいいと思います。 しかし Vim プラグイン結構書いてる人でも is#, is? って使ってるのあんまり見たことない気がします…(基本的に is は List か Dictionary の参照の比較に使うのでその場合 #, ? をつけなくても影響がない) とはいえ is だけではなく is#, is? もあることは確かなので
==系、!=系、is系、isnot系のみ利用できる。
を推します。
is#, is? って使ってるのあんまり見たことない気がします…
ちなみに最近は https://github.com/Kuniwak/vint/issues/233 を見て ==, != 系はリストの比較だけに使おうかなぁ、なんて考えてたりもします(is,isnot 系は文字列と数値の比較で暗黙の変換が働かないのでより厳格)。
List と Dictionary については
- 日本語訳:
「==系、!=系、is系、isnot系のみ利用できる。」とする。
- 原文:
「and only "equal", "not equal" and "is" can be used.」 ↓ 「and only "equal", "not equal", "is" and "isnot" can be used.」 とする旨を issues の「本家helpのtypo報告スレ #1032」に登録する。
ということでよろしいでしょうか?
Funcref についても同様に変更したいところです。
「"equal", "not equal", "is", "isnot" のみ利用できる。」 ↓ 「==系、!=系、is系、isnot系のみ利用できる。」
しかし、「大文字小文字は常に区別される」とのことなので、
大小文字考慮の "==#", "!=#", "is#", "isnot#" 大小文字無視の "==?", "!=?", "is?", "isnot?"
の扱いはどのようになっているのでしょうか。 使えるけれど意味がないものなのか、そもそも使えないものなのかもわかりません。 文字通り "==", "!=", "is", "isnot" のみで「系」を付けたらアカンとか?
質問ばかりで申しわけありません。
返事が遅れ申し訳ありません。
List と Dictionary については
はい、それでいいと思います。 (原文の "isnot" が抜けているのは多分ミスですかね)
扱いはどのようになっているのでしょうか
「常に区別される」と書いてある以上は「使えるけれど意味がないもの」だと思います。
…と思って試してみたらその通りでした。
演算子が ==
, ==#
, ==?
, is
, is#
, is?
に限らず、
s:foo
は s:foo
に対してのみ、残りの2関数についても自分自身に対してのみ 1(等しい) と判定されました(s:op
を手動で変更して試しました)。
関数名による大文字小文字の区別はありません。
function! s:foo() abort
endfunction
function! s:Foo() abort
endfunction
function! Foo() abort
endfunction
let s:op = '=='
let s:funcrefs = [function('s:foo'), function('s:Foo'), function('Foo')]
for s:lhs in s:funcrefs
for s:rhs in s:funcrefs
echo s:lhs s:op s:rhs eval('s:lhs' . s:op . 's:rhs')
endfor
endfor
ありがとうございます! Funcref についても「==系、!=系、is系、isnot系のみ」にしようと思います。 eval は原文との差がかなりあるので、一部分の PR を作ってみます。
(もうすでに crazymaster さんや k-takata さんが catch up 作業をしてるかもしれませんが……)