我对keypress,keydown和keyup的各种行为感到困惑.似乎我错过了一个重要的文档,一个解释了这个三重奏的细微之处和细微差别.有人可以帮我弄清楚我需要阅读哪个文件才能更有效地使用这些事件吗?如果您需要详细信息,请参阅下文.
@ov:你让我展示一些代码,但这并不是我试图解决的代码中的特定问题.我正在尝试处理这些事件处理程序的行为,并要求了解它们的人指出一个好的文档.
我使用jQuery构建输入表单并将其插入到我的文档中.它工作得很好,大多数情况下.我希望表单像我在其中看到的大多数其他输入表单一样响应键盘:esc键应该忽略表单与单击取消按钮相同,并且因为表单上有一个<textarea>,cmd+ enter应该与单击时相同确定按钮.使用按键事件似乎很简单.问题是Chrome不会为密钥或+ 调用我的按键处理程序.它会激发+ 和+ 以及字母数字,但不是+ .esccmdenterctrlenteroptionentercmdenter
所以我会改用密钥.我得到KEYUP了esc,和KEYUP的cmd,和KEYUP的enter,伟大的.但我没有得到KEYUP了enter,而我按住键cmd.
第三次是魅力,你可能会认为keydown似乎工作,但有了keydown,你会得到重复键.我知道,你所要做的就是在第一次调用时解除处理程序的绑定,但三种不同的事件类型表现得如此不同似乎很奇怪.为什么是这样?那里有一个明显的文件,我显然还没读过吗?
我UInt8在使用swift 将Byte数组转换为字符串时遇到问题.我搜索并找到一个简单的解决方案
String.stringWithBytes(buff, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)
但它显示错误String.type没有成员stringWithBytes.谁能建议我一个解决方案?
这是我的代码,我得到一个NSData并转换为字节数组,然后我必须将该字节数组转换为字符串.
let count = data.length / sizeof(UInt8)
var array = [UInt8](count: count, repeatedValue: 0)
data.getBytes(&array, length:count * sizeof(UInt8))
String.stringWithBytes(buff, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud) 我没有遇到任何问题,也没有尝试解决任何问题.我只是好奇为什么Javascript以这种方式工作.我已经和google一起玩了,但是"js function no name"获得了很多关于如何定义和使用匿名函数的命中(不是我正在寻找的).并且几乎没有任何关于使用导致我混淆的语法声明函数的东西 - 我甚至不知道该语法是什么.
问题:我试图找出当函数在对象内部时,声明语法对函数名称有什么影响的原因.如果我声明一个带有函数的对象,如下所示:
var objectOne = { apple: function() {} }
Run Code Online (Sandbox Code Playgroud)
该apple()函数获得一个名称.也就是说,console.log(objectOne.apple.name)显示"苹果".
但是如果我像这样声明一个带有函数的对象:
var objectTwo = {}
objectTwo.banana = function() {}
Run Code Online (Sandbox Code Playgroud)
然后banana()没有得到一个名字.也就是说,console.log(objectTwo.banana.name)什么都不显示.以下内容和类似的排列相同.
var objectThree = { catapult: null }
objectThree.catapult = function() {}
Run Code Online (Sandbox Code Playgroud)
当然,我可以明确地命名这些函数,但同样,我并没有尝试修复任何东西,我只是想知道为什么这两种语法会产生不同的结果.我一直认为它们在功能上是可以互换的.
我注意到这两种形式,不在对象内,自动获取名称:
function one() {}
var two = function() {}
Run Code Online (Sandbox Code Playgroud)
为什么object.property = function(){}表格与其他表格的处理方式不同?
使用Textmate,我以某种方式设法关闭php文件的语法高亮.经过多次试验和错误,我发现这种情况发生在我不小心碰到SHIFT-CTRL-OPTION-D(我在Mac上,顺便说一句).我到处寻找并尝试了许多组合键,但我无法弄清楚如何重新启用漂亮的语法高亮.请帮助我,Textmate大师,你是我唯一的希望!
我发现了bools上的按位运算符在JavaScript中不会返回bool的困难方式.我认为它一定是个bug,但我在ECMAScript规范中查了一下,果然,它说按位运算符返回数字,而不是bool.它没有说明当你在布尔值上使用它们时产生的怪异.为什么这样做?我已经在其他语言中使用了这种技术多年,所以我完全不知道为什么它在JavaScript中做了不同的事情.有任何想法吗?是不是因为没有人以这种方式使用按位运算符(除了我),还是有技术原因?我无法想象检查类型并返回布尔值会很难.
供参考,代码如下:
var found = false;
console.log(found, typeof(found));
found |= true;
console.log(found, typeof(found));
found = true;
console.log(found, typeof(found));
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
false 'boolean'
1 'number'
true 'boolean'
Run Code Online (Sandbox Code Playgroud)
编辑:
根据要求,我在C,C++中使用过这个,我很确定PHP,虽然我不会发誓.是的,我意识到C/C++是打字的,所以内部会有所不同.我只是想知道为什么JavaScript表现不同.
根据请求,我将如何使用| =的示例
var foundLowest = false;
for(var k = 0; k < someLength; ++k) {
foundLowest |= someFunctionThatReturnsTF(k);
}
if(foundLowest === true) {
/* do stuff */
}
Run Code Online (Sandbox Code Playgroud) 我在 Xcode 中创建了一个简单的项目作为 SpriteKit/GameScene 应用程序。我想以编程方式设置窗口大小。我在这里阅读了很多答案,并在其他地方阅读了一些教程,但我读过的内容都没有帮助。
这个答案讨论了重写WindowController.windowDidLoad,但 GameScene 没有给我一个WindowController. 它确实给了我一个ViewController. 本教程说您可以self.view.window?.setFrame()从调用ViewController.viewDidLoad(),但我的窗口顽固地保持相同的大小。我在 SO 上找到的许多答案都谈到了自动布局。我没有什么可布置的。这只是一个 SpriteKit 入门项目。
这个答案说你可以设置preferredContentSizein ViewController.viewWillAppear(),这实际上让我设置窗口大小,但如果我让窗口太大(因为我必须猜测合法的大小),它就不可拖动或调整大小。这个答案说你可以从 获得正确的尺寸view.bounds.size,但它说 800 x 600,这与我的屏幕尺寸相差甚远。这个答案说你可以从 获取边界UIScreen.mainScreen().bounds.size,但我的 GameScene/SpriteKit 启动项目似乎没有任何类型UIScreen。
如何获取屏幕尺寸,以及如何以编程方式设置窗口尺寸和位置?
另外,我似乎找不到更多的其他答案之一说你应该删除GameScene.sks,我就是这样做的,除了大小之外,一切看起来都还不错。
我一直在使用 Apple 的神经网络工具,这意味着我一直在使用不安全的指针。我与 C 一起长大,并且我已经使用 Swift 很长一段时间了,所以我很容易使用它们,但是关于它们的一件事让我完全难倒。
我不明白为什么从另一种派生一种不安全的指针需要付出任何努力。一般来说,这似乎应该是微不足道的,但不同类型的初始化程序特定于它们将采用的输入类型,我很难弄清楚规则。
一个简单而具体的例子,也许是最让我难堪的例子
// The neural net components want mutable raw memory, and it's easier
// to build them up from the bottom, so: raw memory
let floats = 100
let bytes = floats * MemoryLayout<Float>.size
let raw = UnsafeMutableRawPointer.allocate(byteCount: bytes, alignment: MemoryLayout<Float>.alignment)
// Higher up in the app, I want to use memory that just looks like an array
// of Floats, to minimize the ugly unsafe stuff everywhere. So I'll use
// …Run Code Online (Sandbox Code Playgroud) 我继承了一些Java.我有很多其他类C语言的经验,但我还是Java的新手.在一个功能,我的前任已经用两个write()和append()的方法Writer类,但我想不出为什么.更一般地说,我无法弄清楚为什么两种方法都存在,因为Oracle的文档说,这种形式out.append(c)的方法的调用与调用的方式完全相同out.write(c).为什么两种方法都存在?我需要关心吗?
多年后回到C++; 试图赶上C++ 11和14.我已经阅读了关于rvalues和移动语义的内容.我以为我理解了这个概念.显然不是.我看过几十个例子.但我根本无法编译我的代码.我必须遗漏一些明显的例子.我总是得到关于复制ctor被删除的错误,因为unique_ptr<int>有一个用户声明的移动ctor.显然我对这个概念缺少了一些东西,但我无法弄清楚它是什么.这是代码,根据其本质:
#include <memory>
#include <utility>
#include <vector>
int main(int, char*[]) {
auto oneInt{std::make_unique<int>(0)};
auto someInts{std::vector<std::unique_ptr<int>>{std::move(oneInt)}};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑:这是这个特定代码的错误.请注意,我已经尝试了我能想到的代码的每个变体,结果各不相同,但基本问题始终是相同的:复制ctor已删除,因为unique_ptr<int>有一个用户声明的移动ctor.
编辑:我已将代码更新为#include <memory>,并粘贴了新错误.我只能希望问题是那样的傻事.
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:1752:31: error: call to implicitly-deleted copy constructor of
'std::__1::unique_ptr<int, std::__1::default_delete<int> >'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:1668:18: note: in instantiation of function template
specialization 'std::__1::allocator<std::__1::unique_ptr<int, std::__1::default_delete<int> > >::construct<std::__1::unique_ptr<int, std::__1::default_delete<int> >,
const std::__1::unique_ptr<int, std::__1::default_delete<int> > &>' requested here
{__a.construct(__p, _VSTD::forward<_Args>(__args)...);}
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:1514:14: note: in instantiation of function template
specialization 'std::__1::allocator_traits<std::__1::allocator<std::__1::unique_ptr<int, …Run Code Online (Sandbox Code Playgroud) 通过Michael Hartl的Ruby on Rails 优秀教程,我的工作方式.我正在创建一个检查重复电子邮件地址的测试,我对他使用upcase,downcase和case-insensitive检查有点困惑.
测试(代码清单6.17)如下所示:
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com")
end
.
.
.
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.email = @user.email.upcase
user_with_same_email.save
end
it { should_not be_valid }
end
end
Run Code Online (Sandbox Code Playgroud)
请注意拨打电话upcase.一切都很好.但在他的有效性检验(6.18),他将区分大小写关闭.
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
Run Code Online (Sandbox Code Playgroud)
什么?如果他要进行不区分大小写的验证,他为什么要将副本转换为大写?
最后,在6.20中,他设置了一个before_save块,将新用户的电子邮件转换为小写.
before_save { self.email = email.downcase }
Run Code Online (Sandbox Code Playgroud)
这很有道理,因为你想在数据库中使用小写.但我很困惑为什么他在测试中使用大写,因为保存将把电子邮件地址转换为小写无论如何.我错过了一些明显的东西吗
请注意,这不适用于实时网站; 这只是我自己丰富的一些实验.我在Mac OSX 10.9.3上运行Chrome版本35.0.1916.153(最新).
正如许多其他人试图做的那样,我正试图让javascript在新标签中打开一个链接.那里有很多例子,但我不能让它们中的任何一个起作用.最有希望的想法似乎是模拟锚点上的cmd +点击.发生click事件,并且事件对象的metaKey属性设置为true,正如我在添加单击处理程序时所看到的那样,但是没有打开URL:没有新窗口,没有新选项卡.
HTML:
<a id="still" href="gv__.html?pictureMode=still" target="_blank">still</a>
<a id="motion" href="gv__.html?pictureMode=motion" target="_blank">motion</a>
Run Code Online (Sandbox Code Playgroud)
JS:
$(document).ready(function() {
var e = $.Event( "click", { metaKey: true } );
$("a#motion").trigger(e);
$("a#still").trigger(e);
$("a#motion").trigger(e);
$("a#still").trigger(e);
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?