小编Ant*_*ald的帖子

网络音频api:乘波

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的另一个正弦波.

像这样:

在此输入图像描述

javascript web-audio-api

3
推荐指数
1
解决办法
433
查看次数

如何在 flex 容器中调整固定大小(画布)的元素大小?

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 函数,我将画布的宽度和高度更新为这些属性的计算值。

正如小提琴所示,这仅在增加窗口大小时才有效。每当窗口大小减小时,画布(弹性框的项目)保持固定。

javascript css flexbox

3
推荐指数
1
解决办法
1714
查看次数

在" - >"语句中翻转参数

代码后面的代码不起作用,因为重新查找接受一个字符串作为第一个参数,一个正则表达式作为第二个参数.

(-> "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".

如何在不重新包装的情况下解决这个问题?

lisp functional-programming clojure clojurescript

2
推荐指数
1
解决办法
344
查看次数

后处理到Lazy-Sequences(Clojure)

假设我有一个叫做数字的懒惰序列给我一个无限的数字序列: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

2
推荐指数
1
解决办法
71
查看次数

混合两个向量:[aa]和[bb]到[abab]

如何将两个给定的向量混合到一个新的向量中,该向量以交替的顺序保存它们的值.

(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 clojurescript

2
推荐指数
1
解决办法
91
查看次数

需要几个"子命名空间"的快捷方式:as

在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)

clojure clojurescript

2
推荐指数
1
解决办法
63
查看次数

保留哈希映射的某些键

什么是从哈希映射中仅保留某些键的快速方法?

(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)

clojure clojurescript

2
推荐指数
1
解决办法
70
查看次数

杀死paredit中的下一个表达式

在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)

lisp emacs clojure paredit

2
推荐指数
1
解决办法
90
查看次数

clojurescript 原子的哪些变化会导致试剂成分重新渲染?

考虑以下试剂成分。它使用 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

clojure clojurescript reagent

2
推荐指数
1
解决办法
540
查看次数

迭代序列,在每个步骤中访问当前项和以下内容

比方说,我有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)

有没有更好的办法?

clojure clojurescript

1
推荐指数
1
解决办法
56
查看次数

Clojure:when-let的快捷方式

通过以下结构,可以进行真值测试(f1)并将结果保存到本地绑定变量a.如果真值测试是假的,整个表达式返回nil.如果它是真实的(不是假的),则将返回的值传递给第二个函数(f2)并返回它的结果.

(when-let [a (f1)]
   (f2 a))
Run Code Online (Sandbox Code Playgroud)

有捷径吗?我不需要变量a作为中间步骤.

functional-programming clojure clojurescript

1
推荐指数
2
解决办法
79
查看次数

苹果酒代表中的宏(例如 - >)

为什么使用线程宏 - >>在cider-repl中产生错误:

(-> "x..")

//  Unable to resolve symbol: -> in this context
Run Code Online (Sandbox Code Playgroud)

emacs clojure cider

1
推荐指数
1
解决办法
97
查看次数

一些问题涉及鱼壳的自动完成

在鱼壳中键入命令的开头时,最近(或经常?)可能完成的命令以深灰色显示.

说我输入:

fish
Run Code Online (Sandbox Code Playgroud)

深灰色:_config附加.

在这个时候,我还没有明白,我将要做什么.因此,TAB关键显示了所有可能完成的' fish''

我可以继续输入字符,直到它清楚我想要的东西.例如:_con

现在只有一个选项可以完成.所以我可以点击tab键查看fish_config.但是:这没有以某种方式表明.换句话说:输入fish_con之后没有什么能告诉我我不必继续输入.是这样的吗?这不是非常有用吗?

第二个问题:灰色人物的实际意义是什么?如果有办法接受这个建议,我只会理解他们的目的.键入后f,我希望一个关键组合立即完全完成灰色的建议:fish_config.

更好的选择是让灰色字母循环显示所有选项,或者根据历史记录完成可能的完成.

shell fish

0
推荐指数
1
解决办法
231
查看次数