Web Audio API允许我在指定的频率信号中创建一个恒定的正弦波,如下所示:
var actx = new AudioContext();
var osc = actx.createOscillator();
osc.frequency.value = 500;
osc.connect(actx.destination);
osc.start();
Run Code Online (Sandbox Code Playgroud)
如何将此波乘以另一波以便"塑造"它.例如,我怎么能将它乘以200 Hz的另一个正弦波.
像这样:
HTML canvas 元素可以通过 HTML 页面的动态自动调整大小:可能是因为它的样式属性设置为百分比值,或者可能是因为它位于 flex 容器内。从而画布的内容也被调整大小:由于插值,画布内容看起来模糊(分辨率损失)。
为了保持最大分辨率,必须根据元素的当前像素大小渲染画布内容。
这个小提琴展示了如何在函数 getComputedStyle 的帮助下做到这一点:https ://jsfiddle.net/fx98gmu2/1/
setInterval(function() {
var computed = getComputedStyle(canvas);
var w = parseInt(computed.getPropertyValue("width"), 10);
var h = parseInt(computed.getPropertyValue("height"), 10);
canvas.width = w;
canvas.height = h;
// re-rendering of canvas content...
}, 2000); // intentionally long to see the effect
Run Code Online (Sandbox Code Playgroud)
使用 setTimeout 函数,我将画布的宽度和高度更新为这些属性的计算值。
正如小提琴所示,这仅在增加窗口大小时才有效。每当窗口大小减小时,画布(弹性框的项目)保持固定。
代码后面的代码不起作用,因为重新查找接受一个字符串作为第一个参数,一个正则表达式作为第二个参数.
(-> "hello"
.toUpperCase
(re-find #".$"))
Run Code Online (Sandbox Code Playgroud)
如果我重新找到这样的代码,代码将起作用:
(defn re-find2 [s r]
(re-find r s))
Run Code Online (Sandbox Code Playgroud)
如果我现在用re-find2替换re-find,我得到了我的预期:大写的"O".
如何在不重新包装的情况下解决这个问题?
假设我有一个叫做数字的懒惰序列给我一个无限的数字序列:0,1,2,3,4,5,6 ......
(def numbers (iterate inc 0))
Run Code Online (Sandbox Code Playgroud)
我通过将其传递给函数take来限制无穷大.例如:
(take 3 numbers)
; > (0 1 2)
Run Code Online (Sandbox Code Playgroud)
我问自己如何为懒惰序列的成员添加一些后处理.更具体地说:当我使用take时,如何声明一个产生以下输出的函数"numbers-doubled":
(take 3 numbers-doubled)
; > ("00" "11" "22")
Run Code Online (Sandbox Code Playgroud) functional-programming clojure lazy-evaluation lazy-sequences clojurescript
如何将两个给定的向量混合到一个新的向量中,该向量以交替的顺序保存它们的值.
(f [a a] [b b]) ; > [a b a b]
Run Code Online (Sandbox Code Playgroud)
我想到了这个:
(flatten (map vector [:a1 :a2] [:b1 :b2]))
Run Code Online (Sandbox Code Playgroud)
但也许有一种更简单的方法.
在Clojure计划的开头考虑这个:
(ns my.core
(:require [lib.a :as my1]
[lib.b :as my2]
[lib.c :as my3]
[lib.d :as my4]))
Run Code Online (Sandbox Code Playgroud)
这有什么捷径吗?
就像是:
(ns my.core
(:require [lib [[a :as my1]
[b :as my2]
[c :as my3]
[d :as my4]]]))
Run Code Online (Sandbox Code Playgroud) 什么是从哈希映射中仅保留某些键的快速方法?
(def m {:a 1 :b 2 :c 3 :d 4})
Run Code Online (Sandbox Code Playgroud)
显式版本:
((fn [{:keys [b c]}] {:b b :c c})
m)
;= {:b 2, :c 3}
Run Code Online (Sandbox Code Playgroud) 在emacs paredit-mode中,可以通过点击来杀死当前行内的所有后续表达式Ctrl+k:
(1 |(2 3) 4 5)
(1)
Run Code Online (Sandbox Code Playgroud)
你怎么能做同样的事情,但只影响下一个表达式:
(1 |(2 3) 4 5)
(1 4 5)
Run Code Online (Sandbox Code Playgroud) 考虑以下试剂成分。它使用 ref 函数,该函数根据 span 元素的实际大小更新局部状态原子。这样做是为了重新渲染显示其自身大小的组件
(defn show-my-size-comp []
(let [size (r/atom nil)]
(fn []
(.log js/console "log!")
[:div
[:span {:ref (fn [el]
(when el (reset! size (get-real-size el))))}
"Hello, my size is:" ]
[:span (prn-str @size)]])))
Run Code Online (Sandbox Code Playgroud)
如果 的实现get-real-size返回一个向量,则日志消息会不断打印,这意味着组件一直在不必要地重新渲染。如果它只返回一个数字或一个字符串,则日志只会出现两次 - 正如本场景中所预期的那样。
这是什么原因?是否可能在内部使用新向量(尽管包含相同的值)更新 clojure 脚本原子意味着将另一个 JavaScript 对象放在那里,从而更改原子?而放置一个值不会产生可观察到的变化?只是猜测...*
无论如何 - 对于实际用例,将跨度的大小保存在向量中肯定会更好.. 有没有办法实现这一点?
* 因为在 JS 中: ({} === {}) // false
比方说,我有5个存储在向量中的javaScript对象:
(def v [o1 o2 o3 o4 o5])
Run Code Online (Sandbox Code Playgroud)
每个人都有一个方法"连接",它将另一个对象作为参数.
我现在手动:
o1.connect(o2);
o2.connect(o3);
o3.connect(o4);
o4.connect(o5);
Run Code Online (Sandbox Code Playgroud)
什么是自动化的好方法?
只有一些奇怪的解决方案出现在我的脑海中:
(doseq [[a b] (zipmap (butlast v) (rest v))]
(.connect a b))
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
通过以下结构,可以进行真值测试(f1)并将结果保存到本地绑定变量a.如果真值测试是假的,整个表达式返回nil.如果它是真实的(不是假的),则将返回的值传递给第二个函数(f2)并返回它的结果.
(when-let [a (f1)]
(f2 a))
Run Code Online (Sandbox Code Playgroud)
有捷径吗?我不需要变量a作为中间步骤.
为什么使用线程宏 - >>在cider-repl中产生错误:
(-> "x..")
// Unable to resolve symbol: -> in this context
Run Code Online (Sandbox Code Playgroud) 在鱼壳中键入命令的开头时,最近(或经常?)可能完成的命令以深灰色显示.
说我输入:
fish
Run Code Online (Sandbox Code Playgroud)
深灰色:_config附加.
在这个时候,我还没有明白,我将要做什么.因此,TAB关键显示了所有可能完成的' fish''
我可以继续输入字符,直到它清楚我想要的东西.例如:_con
现在只有一个选项可以完成.所以我可以点击tab键查看fish_config.但是:这没有以某种方式表明.换句话说:输入fish_con之后没有什么能告诉我我不必继续输入.是这样的吗?这不是非常有用吗?
第二个问题:灰色人物的实际意义是什么?如果有办法接受这个建议,我只会理解他们的目的.键入后f,我希望一个关键组合立即完全完成灰色的建议:fish_config.
更好的选择是让灰色字母循环显示所有选项,或者根据历史记录完成可能的完成.