我尝试用不熟悉的编程语言学习的第一件事就是它如何处理闭包.它们的语义通常与语言如何处理范围和各种其他棘手的部分交织在一起,因此理解它们会揭示该语言的其他几个方面.此外,闭合是一个非常强大的构造,并且通常会减少我必须键入的样板量.所以我正在搞乱perl闭包,我偶然发现了一个小问题:
my @closures;
foreach (1..3) {
# create some closures
push @closures, sub { say "I will remember $_"; };
}
foreach (@closures) {
# call the closures to see what they remember
# the result is not obvious
&{$_}();
}
Run Code Online (Sandbox Code Playgroud)
当我编写上述代码时,我期待看到
I will remember 1
I will remember 2
I will remember 3
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了I will remember CODE(0x986c1f0).
上面的实验揭示了它$_是非常依赖于上下文的,如果它出现在一个闭包中,那么它的值不会在闭包创建时固定.它的行为更像是一个参考.在perl中创建闭包时,我应该注意哪些其他问题?
好的,我正在为自己写一个项目的js库,我有一个问题.像大多数其他库一样,为了保留我的变量范围,我将代码包装在此:
(function() {
// my code here
})();
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:我注意到jQuery传递了window对象并设置了自己的文档对象,如下所示:
(function(window) {
var document = window.document;
})(window);
Run Code Online (Sandbox Code Playgroud)
有谁知道他们为什么这样做?
我在Rails视图中被这个奇怪的输出所困扰.这是我的模型:
class Comment < ActiveRecord::Base
belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)
以下是我的观点的相关部分.我已经将问题隔离到这个代码块,特别是在最后一次迭代之后和循环结束之前发生的任何事情<% end %>.如果我注释掉每次迭代中打印的实际文本,原始数组仍然会打印出来.
<h2>Comments</h2>
<%= @post.comments.each do |comment| %>
<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p>
<p>
<%= comment.body %>
</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是奇怪的输出(带样本注释.):
评论者:迈克尔
好帖子.
评论者:迈克尔
好帖子.
评论者:迈克尔
测试.
评论者:约翰
阵列仍然有趣吗?
[#<Comment id: 1, commenter:
"Michael", body: "Good post.",
post_id: 1, created_at: "2011-01-12
03:51:20", updated_at: "2011-01-12
03:51:20">, #<Comment id: 2,
commenter: "Michael", body: "Good
post.", post_id: 1, created_at:
"2011-01-12 03:52:06", updated_at:
"2011-01-12 03:52:06">, #<Comment id:
3, commenter: "Michael", body: …Run Code Online (Sandbox Code Playgroud) 所以我有一个C#应用程序.它有一些链接到它的资产,并且在编译期间被嵌入.应用程序在Windows上编译和运行完美.当用mono测试兼容性时,告诉所有内容都是正确的.如果我尝试编译给出一个错误的n xml文件
/home/rupert/Desktop/CloudObserverLite(4)/CloudObserverLite/Properties/Resources.resx: Error: Error: Invalid ResX input.
Position: Line 123, Column 5.
Inner exception: value
(CloudObserverLite)
Run Code Online (Sandbox Code Playgroud)
如果我们看看resx xml
...<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="framework_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>../assets/framework_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="index_html" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>../assets/index.html;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1251</value>
</data>...
Run Code Online (Sandbox Code Playgroud)
第123行将是第一个 </data>标记.
这是所有resx文件,如果它可以提供更多信息
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML …Run Code Online (Sandbox Code Playgroud) 我有一个工作GitHub帐户和个人帐户.首先,我将个人用于测试项目,然后我继续前进并在同一台计算机上使用另一个帐户创建了一个存储库.
现在我想再次在我的个人帐户上创建一个新的存储库,我更改了全局和本地user.name,并在GitHub设置页面中输入了一个新的ssh密钥对.然后我设置了目录
git init
git remote add origin <url>
git push origin
Run Code Online (Sandbox Code Playgroud)
但现在告诉我
错误:对personaluser/newrepo.git的许可被拒绝
我不知道其他帐户是如何连接到这个帐户的..git/config显示没有workusername相关的东西.
如果您使用的是Windows 10,请花些时间阅读Rajan的答案.
如果我在irb中进行反向交互式搜索,然后输入一个控制字符(箭头键是我实际看到的唯一的那个).所以我从这个会话开始:
$ irb
>> print "hello"
hello
Run Code Online (Sandbox Code Playgroud)
然后进入^r,h
$ irb
>> print "hello"
hello
(reverse-i-search)`he': print "hello"
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.然后我点击了左箭头,我最终得到了这个:
$ irb
>> print "hello"
hello
>> print "[Dhello"
Run Code Online (Sandbox Code Playgroud)
随后使用箭头会使光标正常移动.
我想知道是否有可能只需my_sql_escape字符串整个$ _POST和$ _GET数组,所以你不会错过任何变量?
不知道如何测试它或我会自己.谢谢!
我想将文本颜色更改为亮绿色(#66FF00),但保留gnome-terminal的默认背景颜色(即:"使用系统主题颜色").我可以自定义文本颜色,但在这种情况下,我仍然需要自己指定背景.所以我想知道gnome-terminal默认背景颜色的RGB颜色是什么(在Ubuntu 10.04中),我可以在哪里找到这个值.谢谢.
假设我有一个如下的三次Bezier路径(格式化用于Raphael路径函数):
M55 246S55 247 55 248
只是一个例子.这是从我的绘图应用程序中获取的,当用户按住鼠标按钮时,我使用光标绘制一条线,有点像铅笔或标记.每次用户移动鼠标时,我都会使用jquery的mousemove事件在两点之间绘制线条.在绘制线之前还有另一个(参考点),因此可以创建贝塞尔曲线.
这是我的问题:是否有可能让Raphael只画出一条给定路径的一半?我知道getSubpath()函数,但如果我对Bezier曲线的理解是正确的,那么计算第二个参数就相当困难了.动画功能的问题在于它会创建双线(也就是说,它会创建我想要的曲线,以及不应该显示的围绕它的四四方向线,可能是因为鼠标的移动速度比动画可以处理的速度快).
当然,如果我的方法本身存在某些方面的缺陷(或者我对可能的解决方案的理解),我想听听它.任何帮助,将不胜感激.
我一直在阅读关于内存管理的苹果文档,现在对于推荐的Accessors实现感到有些困惑.Apple引用了3种实现访问器的方法.
技术1
我已经复制了第一种反映出来的技术的代码:"Getter在返回之前保留并自动释放值; setter释放旧值并保留(或复制)新值." 第一种技术被认为更加强大,但是经常被称为吸气剂会受到性能损失.
- (NSString*) title {
return [[title retain] autorelease];
}
- (void) setTitle: (NSString*) newTitle {
if (title != newTitle) {
[title release];
title = [newTitle retain]; // Or copy, depending on your needs.
}
}
Run Code Online (Sandbox Code Playgroud)
跳绳技术2
技术3
对于经常被称为setter和getter的人来说,第三种技术更好.这也是我一直遵循的方法.
- (NSString*) title {
return title;
}
- (void) setTitle: (NSString*) newTitle {
if (newTitle != title) {
[title release];
title = [newTitle retain]; // Or copy, depending on your needs.
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
(技术1)即使不指向任何东西,setter也会首先释放现有值.这将向nil发送一条消息,我理解在Objective-C中支持但仍然看起来很奇怪.我理解正确吗?
(技术1)为什么保留堆叠在自动释放内?
(技术1)使用getter的调用者是否在完成对象后调用release? …
javascript ×2
jquery ×2
.net ×1
accessor ×1
arrays ×1
bezier ×1
c# ×1
closures ×1
git ×1
github ×1
irb ×1
ledit ×1
models ×1
mono ×1
mysql ×1
objective-c ×1
perl ×1
permissions ×1
php ×1
raphael ×1
readline ×1
resources ×1
ruby ×1
scope ×1
sql ×1
svg ×1
terminal ×1
ubuntu ×1
ubuntu-10.04 ×1
variables ×1
views ×1
window ×1