我正在研究一些在Ruby中深度复制对象的技术(MRI 1.9.3).
我遇到了以下示例,但我不确定#dup方法实现.我测试了它并且确实有效,但是我不理解该方法的逻辑步骤,因此我在自己的代码中使用它并不舒服.
是语句@name = @name.dup引用伊娃内的副本?怎么样?我看不出来.
请问有人解释一下吗?
还有,有更好的方法吗?
class MyClass
attr_accessor :name
def initialize(arg_str) # called on MyClass.new("string")
@name = arg_str # initialize an instance variable
end
def dup
the_copy = super # shallow copy calling Object.dup
@name = @name.dup # new copy of istance variable
return the_copy # return the copied object
end
end
Run Code Online (Sandbox Code Playgroud) 我试图找到设计如何产生remember_token.
我注意到它是生成的(并存储在cookie中),即使DB中没有令牌列来保存它.我想了解它的工作原理,但我找不到合适的位置.
有人能指点我的源代码文件吗?
TI正在尝试使用RVM在我的系统上更新Ruby.
我目前使用的是Ruby-1.9.3-p194,一切正常.
这是我使用的命令:
$ rvm install 1.9.3-p286
Run Code Online (Sandbox Code Playgroud)
这是输出:
ruby-1.9.3-p286 - #configure
ruby-1.9.3-p286 - #download
ruby-1.9.3-p286 - #extract
ruby-1.9.3-p286 - #validate
Libraries missing for ruby-1.9.3-p286: /opt/sm/pkg/versions/libffi/3.0.10/lib/libffi.5.dylib. Refer to your system manual for installing libraries
Mounting remote ruby failed, trying to compile.
Installing Ruby from source to: /Users/Tom/.rvm/rubies/ruby-1.9.3-p286, this may take a while depending on your cpu(s)...
ruby-1.9.3-p286 - #downloading ruby-1.9.3-p286, this may take a while depending on your connection...
ruby-1.9.3-p286 - #extracting ruby-1.9.3-p286 to /Users/Tom/.rvm/src/ruby-1.9.3-p286
ruby-1.9.3-p286 - #extracted to /Users/Tom/.rvm/src/ruby-1.9.3-p286
ruby-1.9.3-p286 …Run Code Online (Sandbox Code Playgroud) 我正在学习Elixir,我目前正在处理捕获和部分函数应用的语义.
我已经熟悉了fn(x)-> x + 1 end语法.
我注意到了我认为令人惊讶的行为.例如,我观察到此代码段中的最后一个表达式返回false:
f = &(&1 <> "-X")
# #Function<6.50752066/1 in :erl_eval.expr/5>
is_function f
# true
is_function &(&1 <> "-X")
# true
f == &(&1 <> "-X")
# false
Run Code Online (Sandbox Code Playgroud)
我将其解释为意味着"重新创建"动态匿名函数会&(&1 <> "-X")返回一个值,该值不等于存储的值f(根据==语义).
那没关系,这个其他片段将证实我的理论:
g = &(String.upcase(&1))
# &String.upcase/1
is_function g
# true
is_function &(String.upcase(&1))
# true
g == &(String.upcase(&1))
# true
Run Code Online (Sandbox Code Playgroud)
在那里,g将等于重新创建的匿名函数,因为 - 可能 - 捕获现有的命名函数由编译器优化,并且每次返回相同的值.第二个片段中第一行的返回值似乎证实了两种情况的区别对待.
然后我尝试使用"已知"函数,这意味着它已经存在:
f = &(&1 <> "-X")
z = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将裁剪的图像保存到相机胶卷.
(我需要以编程方式进行,我不能让用户编辑它)
这是我的(仍然非常基本的)剪切和保存代码:
- (void)cutAndSaveImage:(UIImage*)rawImage
{
CIImage *workingImage = [[CIImage alloc] initWithImage:rawImage];
CGRect croppingRect = CGRectMake(0.0f, 0.0f, 3264.0f, 1224.0f);
CIImage *croppedImage = [workingImage imageByCroppingToRect:croppingRect];
UIImage *endImage = [UIImage imageWithCIImage:croppedImage scale: 1.0f orientation:UIImageOrientationRight];
self.testImage.image = endImage;
UIImageWriteToSavedPhotosAlbum(rawImage, self, @selector(image:didFinishSavingWithError:contextInfo:) , nil);
UIImageWriteToSavedPhotosAlbum(endImage, self, @selector(image:didFinishSavingWithError:contextInfo:) , nil);
}
Run Code Online (Sandbox Code Playgroud)
该方法在以下内容中调用:
- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
CIImage使用raw UIImage. CIImage使用第一个实例方法进行裁剪. UIImage使用裁剪的CIImage 创建一个新的. 此时,为了得到一些反馈,我将新裁剪设置UIImage为a的背景图像UIImageView.这是有效的,我可以清楚地看到图像完全按照我想要的方式裁剪.
但是,当我尝试将其保存到相机胶卷时,事情就会停止工作.
我无法保存新创建的endImage.
正如您所看到的,我添加了一行来保存原件UIImage,仅用于比较.原版正常保存.
另一个令人困惑的事情是NSError传递给image:didFinishSavingWithError:contextInfo:回调的对象是nil.(通常会对两次保存尝试执行回调)
编辑:刚做了一个实验: …
我正在测试一个Rails(3.2.18)应用程序,我在RSpec(2.14.1)视图规范中引用视图助手时遇到了一些麻烦.
视图规范失败,因为视图无法访问已定义的辅助方法app/helpers,也无法访问已标记为帮助程序的控制器方法.
我想我可以用它来解决这个问题,但我想知道是否可以通过简单的配置调整来解决它.
我的任务是确定记录子集的所有布尔属性是否都是true. 使用后sum,我希望有一个类似的方法来处理布尔值。然而,我找不到这样的东西。
我觉得答案很可能非常清晰、直接,并且可以通过简单的谷歌搜索获得,但我无法想出正确的短语来搜索它。
我想要实现的目标的示例:
[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: false>,
]
Run Code Online (Sandbox Code Playgroud)
应该返回false
[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: true>,
]
Run Code Online (Sandbox Code Playgroud)
应该返回true
目前我正在使用count.
all_arborists? = ( User.count == User.where(arborist: true).count )
Run Code Online (Sandbox Code Playgroud)
它给了我结果,但我觉得其中的内容超出了我的头脑所能理解的范围。
我正在使用带有SQL后端(MySQL或Postgres)的Ruby On Rails(但这并不重要).
Web应用程序将是多进程的,其中一组app-server进程正在运行并在同一个DB上运行.
我在想:处理比赛条件有什么好的和共同的策略吗?
由于它将是一个数据库密集型应用程序,我可以很容易地看到两个客户端如何同时尝试修改相同的数据.
让我们简化一下情况:
有没有一种简单的方法来处理这种情况?
我正在考虑使用与每条记录相关联的id-tokens.在更新记录时将更改此令牌,从而使基于陈旧数据(旧过期令牌)的任何后续更新尝试无效.
有没有更好的办法?也许已经在MySQL中构建的东西?我也对在这种情况下使用的编码模式感兴趣.
谢谢
ruby ×6
elixir ×2
activerecord ×1
deep-copy ×1
devise ×1
ios ×1
makefile ×1
mysql ×1
objective-c ×1
postgresql ×1
rspec ×1
rvm ×1
sql ×1