Clourescript:转换数组访问
Clourescript: converting array access
问题
我正在尝试转换以下代码:https://github.com/mdn/webgl-examples/blob/gh-pages/tutorial/glUtils.js#L13-L15
JavaScript代码是:
Matrix.Translation = function (v)
{
// ignore length 2 case for simplicty
if (v.elements.length == 3) {
var r = Matrix.I(4);
r.elements[0][3] = v.elements[0];
r.elements[1][3] = v.elements[1];
r.elements[2][3] = v.elements[2];
return r;
}
throw "Invalid length for Translation";
}
现在,我可以重写 cljs 如下:
(defn translation [x y z]
(let [r (. js/Matrix I 4)]
r[0][3] = x ;; how do I write this?
r[1][3] = y ;; how do I write this?
r[2][3] = z ;; how do I write this?
))
问题
但是,如何在cljs中写r[0][3]?
您可以使用 aget
和 aset
来处理 Javascript 数组:
(def arr (array (array "a1" "a2") (array "b1" "b2") (array "c1" "c2")))
它创建以下嵌套数组:
#js [#js ["a1" "a2"] #js ["b1" "b2"] #js ["c1" "c2"]]
您可以使用 aget
:
访问嵌套元素
(aget arr 1 0)
;; => "b1"
并更新为 aset
:
(aset arr 1 0 "newb1")
将 arr
更新为:
#js [#js ["a1" "a2"] #js ["newb1" "b2"] #js ["c1" "c2"]]
您可能想看看与 Javascript 数组相关的其他函数:alength
, array
, make-array
, array?
.
问题
我正在尝试转换以下代码:https://github.com/mdn/webgl-examples/blob/gh-pages/tutorial/glUtils.js#L13-L15
JavaScript代码是:
Matrix.Translation = function (v)
{
// ignore length 2 case for simplicty
if (v.elements.length == 3) {
var r = Matrix.I(4);
r.elements[0][3] = v.elements[0];
r.elements[1][3] = v.elements[1];
r.elements[2][3] = v.elements[2];
return r;
}
throw "Invalid length for Translation";
}
现在,我可以重写 cljs 如下:
(defn translation [x y z]
(let [r (. js/Matrix I 4)]
r[0][3] = x ;; how do I write this?
r[1][3] = y ;; how do I write this?
r[2][3] = z ;; how do I write this?
))
问题
但是,如何在cljs中写r[0][3]?
您可以使用 aget
和 aset
来处理 Javascript 数组:
(def arr (array (array "a1" "a2") (array "b1" "b2") (array "c1" "c2")))
它创建以下嵌套数组:
#js [#js ["a1" "a2"] #js ["b1" "b2"] #js ["c1" "c2"]]
您可以使用 aget
:
(aget arr 1 0)
;; => "b1"
并更新为 aset
:
(aset arr 1 0 "newb1")
将 arr
更新为:
#js [#js ["a1" "a2"] #js ["newb1" "b2"] #js ["c1" "c2"]]
您可能想看看与 Javascript 数组相关的其他函数:alength
, array
, make-array
, array?
.