我是Python新手(通常使用C#),在过去几天开始使用它.
在一个类中,您是否需要对该类数据成员和方法的任何调用加前缀?那么,如果我正在调用一个方法或从该类中获取一个值,那么我需要使用self.method()或者self.intvalue,例如?
我只是想检查一下我还没有遇到过那种冗长的方式.
关于构造函数在Javascrpt中的工作原理,我感到非常困惑.尽管使用该语言已有好几年了(大多数情况下它就像是LISP的半命令版本),但我想更多地了解对象应该如何工作.
鉴于此代码:
function Foo(x) {
return {
bar: function() { return x; }
};
}
Run Code Online (Sandbox Code Playgroud)
打电话myFoo = Foo(5)和有myFoo = new Foo(5)什么区别?或者,换句话说,Javascript中的构造函数究竟是做什么的?
在Python中,是否可以声明一个类型提示来排除某些类型的匹配?
例如,有没有办法声明“ typing.Iterableexcept not str ”之类的类型提示?
在Go中你可以做到:
if foo := bar() ; foo != nil {
...
}
Run Code Online (Sandbox Code Playgroud)
在C/C++中,您可以:
while ((foo = bar()) != NULL) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,Go的语法似乎没有提供在while循环中进行赋值和比较的任何等效方法; Go已替换while为特定的调用for(例如for a,相当于for ; a ;).简单地尝试使用if版本语法会使解析器混淆,因为它期望有第三个语句.
我可以说:
for foo := bar() ; foo != nil ; foo = bar() {
....
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,bar()调用相当长,复杂,并且不容易分解为自己的函数(虽然我可以做一些事情,比如声明一个本地func调用,但这仍然会降低代码的清晰度).
现在我在做:
for {
foo := bar();
if foo == nil { break; }
...
}
Run Code Online (Sandbox Code Playgroud)
但这似乎是不洁净的,因为它将循环标准与循环语句本身分开,并且因为它依赖于它break.
那么,在Go中的while循环中是否有一种干净,惯用的方式进行分配和比较?这是一个常见的用例,我无法想象没有办法做到这一点.
我有一个应用程序,其中有几个线程,每个线程都被设置为单独的AudioTrack MODE_STREAM.在应用程序之间切换工作正常,当应用程序正常关闭时,它似乎正确关闭所有内容.
但是,如果应用程序在外部终止,例如从调试器终止,或者因为我刚刚在旧版本运行时安装了新版本,似乎全局AudioMixer中的某些状态搞砸了,我得到类似logcat的输出:
09-16 14:50:38.965 298 7150 W AudioTrack: obtainBuffer timed out (is the CPU pegged?) 0x83c2348 user=00000eb3, server=00000000
09-16 14:50:39.025 7066 7132 W AudioTrack: obtainBuffer timed out (is the CPU pegged?) 0x8249d40 user=00002000, server=00000000
09-16 14:50:40.277 298 7156 W AudioTrack: obtainBuffer timed out (is the CPU pegged?) 0x84cb810 user=00000eb3, server=00000000
Run Code Online (Sandbox Code Playgroud)
并且没有使用AudioTrack的应用程序能够再次播放音频,直到我重新启动设备.在此特定日志片段中,PID 298是system_server,7066是应用程序的新实例.
我认为发生的事情是AudioTrack在作者线程有机会清理之前就消失了.这让我觉得我应该做些什么来清理.我已经俘获我的活动的onStop,并onDestroy和那些具有关闭我的音频线,但有这个需要做的另一个地方?
另外,有更好的方法来清理AudioTrack吗?看起来Android的这一部分特别脆弱,但是我无法想象每个人都会使用SoundPool和MediaPlayer来处理所有事情,因为这些API非常有限且非常繁琐(而且两者似乎都以不同的方式包装AudioTrack).
在C++ 11中,如何声明一个将lambda表达式作为参数的函数?我可以在网上找到大量资源来声明lambdas或将它们作为模板参数,但我真正想做的是能够使用lambdas作为易于声明的回调处理程序,类似于闭包所能实现的在Objective-C中的JavaScript和代码块中.
基本上,我想用lambda替换的经典C++构造是这样的:
class MyCallback {
public:
virtual ~MyCallback() {}
virtual void operator(int arg) = 0;
};
void registerCallback(const std::shared_ptr<MyCallback> &);
void foo(void) {
int a, b, c;
class LocalCallback: public MyCallback {
int a, b, c;
public:
LocalCallback(int a, int b, int c): a(a), b(b), c(c) {}
void operator(int arg) { std::cout << (a+b+c)*arg << std::endl; }
};
registerCallback(std::shared_ptr<MyCallback>(new LocalCallback(a,b,c)));
}
Run Code Online (Sandbox Code Playgroud)
这将被简化为:
void registerCallback(/* WHAT GOES HERE? */);
void foo(void) {
int a, b, c;
registerCallback([=](int arg){std::cout << (a+b+c)*arg …Run Code Online (Sandbox Code Playgroud) 我正在为我的网站使用自定义Soundcloud播放器waveform.js来生成波形.它工作得很好,但缺乏擦洗功能.我该如何添加?
我不是一个JS向导,仍然在学习我的方式所以我会非常感谢任何帮助或建议!
更新IV:我找到了一种将画布生成的波形包含在原始SoundCloud自定义播放器中的新方法sc-player.js.
首先,我找到了一行代码,负责播放器的HTML结构,并添加id="waveform"到sc-waveform container第529行:
.append('<div class="sc-time-span"><div class="sc-waveform-container" id="waveform">
</div><div class="sc-buffer"></div><div class="sc-played"></div></div>')
Run Code Online (Sandbox Code Playgroud)
然后我更新了676行,替换img为canvas
$available = $scrubber.find('.sc-waveform-container canvas'),
Run Code Online (Sandbox Code Playgroud)
接下来,我找到了一段代码,负责在340行嵌入波形的原始图像并将其评论出来:
// $('.sc-waveform-container', $player).html('<img src="' + track.waveform_url +'" />');
Run Code Online (Sandbox Code Playgroud)
然后我在页面底部发布了以下代码:
<script>
SC.get("/tracks/80348246", function(track){
var waveform = new Waveform({
container: document.getElementById("waveform"),
height: 40,
innerColor: '#ffffff'
});
waveform.dataFromSoundCloudTrack(track);
});
//----------- end of insterted waveform.js code ----------------------
</script>
Run Code Online (Sandbox Code Playgroud)
结果非常有希望,现在我有完全可定制的波形和洗涤器也正常工作.但是仍然有一些我想解决的问题.
在Chrome中,当我按下播放和暂停时,然后单击波形,曲目开始播放,但播放按钮不会改变其状态.然后需要双击它来停止轨道.
缓冲区和进度条仍然只是sc-player后台的div.我怎么能联系sc-player.js并waveform.js在一起,使波形画布上产生(例如如在进度http://waveformjs.org/)?
任何想法如何解决这些问题?
这是现场网站上的播放器:http: //www.code.spik3s.com/rnr/
我有一个大型的跨平台项目,需要在不同的地方建设; 在某些地方,可能有不同的UI工具包,声音API等,我试图找出自动配置哪些目标根据哪些库存在进行配置的最佳方法.
我正在尝试的代码是,例如:
find_library(PC_EGL EGL)
find_library(PC_GLESv2 GLESv2)
find_library(PC_Xxf86vm Xxf86vm)
if (DEFINED PC_EGL AND DEFINED PC_GLESv2 AND DEFINED PC_Xxf86vm)
add_executable(foo foo.cpp)
target_link_libraries(foo ${PC_EGL} ${PC_GLESv2} ${PC_Xxf86vm})
endif()
Run Code Online (Sandbox Code Playgroud)
但是,如果我在没有libGLESv2的系统上构建它,我会收到错误:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
PC_GLESv2
linked by target "foo" in directory /path/to/platform
Run Code Online (Sandbox Code Playgroud)
find_library文档暗示变量PC_EGL_NOTFOUND应该被设置,但它不是(CMake 2.8.5).那么,使用find_library确定目标是否应该存在的适当方法是什么?好像在用
if (NOT PC_EGL MATCH "-NOTFOUND")
Run Code Online (Sandbox Code Playgroud)
有点脆弱和繁琐,所以有没有一个更好的机制来确定一个基本上找到一个库的CMake命令路径?
这里已经多次询问过有关解释语言或R的问题,但我没有找到任何关于编译语言的信息,特别是C#.
根据我读到的内容似乎可以忽略不计,但它仍然会导致解释语言的速度减慢: 评论是否会减慢解释语言的速度?
编译语言怎么样?!他们只减慢编译过程但不执行?
我正在制作响应式布局,在较小的屏幕上,侧边栏<ul>变成了display: flexwith flex-wrap: wrap,并且项目的样式为flex-grow: 1。大多数时候这看起来都很好:
然而,当只有几个项目溢出时,例如在稍大的屏幕上,这看起来很糟糕:
有没有什么方法可以flex-box尝试根据每行平衡的总项目宽度来包装事物?例如,在第二个示例中,“People”(也许还有“Protocols”)流到第二行会更有意义。
或者,我应该采取另一种方法来布置此菜单吗?