ObservableArrayとネイティブ配列(Array)の相互運用性の向上 #155

Closed
simdy opened this Issue Jan 25, 2013 · 1 comment

Comments

Projects
None yet
1 participant
@simdy
Member

simdy commented Jan 25, 2013

例えばネイティブ配列のconcat()の引数としてObservableArrayを渡すと、
配列の要素の結合が正しく行われない。

var native = [1, 2];
var obs = h5.core.data.createObservableArray().push('A', 'B');
var result = native.concat(obs); //[1, 2, 'A', 'B'] が正解だが、[1, 2, obs] になってしまう

このようなことができるだけ発生しないようにする。

@simdy

This comment has been minimized.

Show comment
Hide comment
@simdy

simdy Feb 14, 2013

Member

ObservableArrayからネイティブ配列(の呼び出し時点のスナップショット)を取得するための
toArray()メソッドを追加する。

ObservableArrayを「完全に」ネイティブ配列相当としてブラウザに扱わせるのは困難なので、
ネイティブ配列を要求するメソッド(array.concat()等々)に渡すときは
toArray()を使用してネイティブ配列化してもらうようにする。

一方、ObservableArrayの配列相当メソッドのうち、戻り値として新規に配列を返すメソッド(concat等)については、
戻り値自身もObservableArrayになるようにする。
ObsArrayの引数はObsArrayをとれるようにする。

整理すると:
obs.concat(obs) -> obs
obs.concat(array) -> obs //obsはネイティブ配列を受け取れるようにしておく
array.concat(obs.toArray()) //ネイティブ配列と相互運用するときはtoArray()を使用

注:実装を改良することでarray.concat()等配列のメソッドの引数に渡したときに
配列として扱わせるようにすることは可能な模様だが、
いついかなる場合でもそれが可能なわけではない。
(ブラウザから見るとObsArrayはやはり「オブジェクト」であり、「配列」ではない。
例えばコンソール出力した場合の挙動もネイティブ配列とは微妙に異なる。)
そのため、状況により使い分けるのは長期的に見て混乱が予想されるので、
一律toArray()による対応をとってもらうこととする。

Member

simdy commented Feb 14, 2013

ObservableArrayからネイティブ配列(の呼び出し時点のスナップショット)を取得するための
toArray()メソッドを追加する。

ObservableArrayを「完全に」ネイティブ配列相当としてブラウザに扱わせるのは困難なので、
ネイティブ配列を要求するメソッド(array.concat()等々)に渡すときは
toArray()を使用してネイティブ配列化してもらうようにする。

一方、ObservableArrayの配列相当メソッドのうち、戻り値として新規に配列を返すメソッド(concat等)については、
戻り値自身もObservableArrayになるようにする。
ObsArrayの引数はObsArrayをとれるようにする。

整理すると:
obs.concat(obs) -> obs
obs.concat(array) -> obs //obsはネイティブ配列を受け取れるようにしておく
array.concat(obs.toArray()) //ネイティブ配列と相互運用するときはtoArray()を使用

注:実装を改良することでarray.concat()等配列のメソッドの引数に渡したときに
配列として扱わせるようにすることは可能な模様だが、
いついかなる場合でもそれが可能なわけではない。
(ブラウザから見るとObsArrayはやはり「オブジェクト」であり、「配列」ではない。
例えばコンソール出力した場合の挙動もネイティブ配列とは微妙に異なる。)
そのため、状況により使い分けるのは長期的に見て混乱が予想されるので、
一律toArray()による対応をとってもらうこととする。

simdy added a commit to hifive-labs/hifivemain that referenced this issue Feb 14, 2013

simdy added a commit to hifive-labs/hifivemain that referenced this issue Mar 8, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Mar 8, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Mar 8, 2013

fukudayasuo
#155 テスト修正しました。
インスタンスが違うものを比較していた箇所があり、配列の比較方法を変えたことで失敗するようになっていたので直しました。

@simdy simdy closed this Mar 8, 2013

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment