小编tom*_*ave的帖子

Ruby:对象深度复制

我正在研究一些在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)

ruby deep-copy

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

Rails 4,Devise记住令牌

我试图找到设计如何产生remember_token.

我注意到它是生成的(并存储在cookie中),即使DB中没有令牌列来保存它.我想了解它的工作原理,但我找不到合适的位置.

有人能指点我的源代码文件吗?

ruby ruby-on-rails devise ruby-on-rails-4

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

Ruby-1.9.3-p286:无法在OS X上安装RVM

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)

ruby makefile rvm

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

Elixir匿名函数,捕获和部分应用程序

我正在学习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)

elixir

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

UIImageWriteToSavedPhotosAlbum()不保存裁剪的图像

我正在尝试将裁剪的图像保存到相机胶卷.
(我需要以编程方式进行,我不能让用户编辑它)

这是我的(仍然非常基本的)剪切和保存代码:

- (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.(通常会对两次保存尝试执行回调)

编辑:刚做了一个实验: …

objective-c ios

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

RSpec视图规范:访问视图助手

我正在测试一个Rails(3.2.18)应用程序,我在RSpec(2.14.1)视图规范中引用视图助手时遇到了一些麻烦.

视图规范失败,因为视图无法访问已定义的辅助方法app/helpers,也无法访问已标记为帮助程序的控制器方法.

我想我可以用它来解决这个问题,但我想知道是否可以通过简单的配置调整来解决它.

ruby rspec ruby-on-rails

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

"%w(foo,bar)"在Elixir中构造

偶然发现%w(foo, bar)Elixir 的构造.

我在当前的文档中找不到任何引用,谷歌也没有帮助.
看起来像是 2013年语言的一部分.

任何人都可以指向我的文档,也许可以展示一个例子吗?

elixir

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

如何使用/通过 ActiveRecord 对一组记录进行布尔运算?

我的任务是确定记录子集的所有布尔属性是否都是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)

它给了我结果,但我觉得其中的内容超出了我的头脑所能理解的范围。

ruby activerecord ruby-on-rails

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

关系DB赛车条件

我正在使用带有SQL后端(MySQL或Postgres)的Ruby On Rails(但这并不重要).
Web应用程序将是多进程的,其中一组app-server进程正在运行并在同一个DB上运行.

我在想:处理比赛条件有什么好的和共同的策略吗?

由于它将是一个数据库密集型应用程序,我可以很容易地看到两个客户端如何同时尝试修改相同的数据.

让我们简化一下情况:

  • 两个客户端/用户获取相同的数据,如果同时发生这种情况并不重要.
  • 它们配有两个代表相同数据的网页.
  • 后来他们都尝试对同一条记录写一些不兼容的修改.

有没有一种简单的方法来处理这种情况?

我正在考虑使用与每条记录相关联的id-tokens.在更新记录时将更改此令牌,从而使基于陈旧数据(旧过期令牌)的任何后续更新尝试无效.

有没有更好的办法?也许已经在MySQL中构建的东西?我也对在这种情况下使用的编码模式感兴趣.

谢谢

ruby mysql sql postgresql ruby-on-rails

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