배열에 이진 데이터를 복사하려고하는데 기대하지 않는 결과가 나타납니다. 나는 그것을 그것을 보여주는이 작은 문제로 축소시켰다.REBOL3 - 바이너리에서 바이너리를 복사하는 방법! 차단! 올바르게
는b: #{0102030405060708}
c: array (length? b)
repeat num (length? b) [
print [
{Setting location}
num
{to value of}
to-binary reduce [(pick b num)]
]
poke c num (to-binary reduce [(pick b num)])
]
이 결과 :
Setting location 1 to value of #{01}
Setting location 2 to value of #{02}
Setting location 3 to value of #{03}
Setting location 4 to value of #{04}
Setting location 5 to value of #{05}
Setting location 6 to value of #{06}
Setting location 7 to value of #{07}
Setting location 8 to value of #{08}
== #{08}
>> c
== [#{08} #{08} #{08} #{08} #{08} #{08} #{08} #{08}]
내가 내 반복 블록과 ==#{08}
를 반환하고 있음을 볼 수있다, 그러나 그것은 어디에서 오는 나는 konw하지 않습니다. 내가 trace on
로 확인하고 그 찌르는 진술은 반복의 모든 단계에서 블록의 모든 요소를 설정하는 것 같습니다. 이것은 포인터 문제 인 것 같아서 copy
으로 해결할 수 있습니다. 누군가 나에게 무슨 일이 일어나고 있는지 아이디어를 줄 수 있습니까?
좀 더 테스트 : Ladislavs의 대답
>> to-binary reduce [pick b 1]
== #{01}
>> poke c 1 to-binary reduce [pick b 1]
== #{01}
>> c
== [#{01} #{01} #{01} #{01} #{01} #{01} #{01} #{01}]
>> poke c 2 #{02}
== #{02}
>> c
== [#{01} #{02} #{01} #{01} #{01} #{01} #{01} #{01}]
>> u: to-binary reduce [pick b 4]
== #{04}
>> poke c 4 u
== #{04}
>> c
== [#{04} #{02} #{04} #{04} #{04} #{04} #{04} #{04}]
응답 :
버그에 대한 답변을 주셔서 감사합니다.첫 번째 예는 내가 예상 한 것과 다른 결과를 제공합니다. I 길이 1에 관심이있는 반면 진 요소는 길이가 8 각이다 (to-binary
의 블록 인수 따라서 용도.)
>> c
== [#{0000000000000001} #{0000000000000002} #{0000000000000003} #{0000000000000004} #{0000000000000005} #{0000000000000006} #{0000000000000007} #{0000000000000008}]
제 이뤄지는 발생한 c: copy []
Ladislav에 대한 설명 주셔서 감사합니다. 귀하의 예제 중 첫 번째와 관련하여 길이가 8보다 짧은 바이너리를 생성하는 다른 방법이 있습니까? 위의 답변을 위와 같이 편집했습니다. 허락하신다면, 나는'append'를 사용하여 조정할 것입니다, 그러나 나는 단지 궁금했습니다. – kealist