gpt4 book ai didi

ruby-on-rails - 看不懂Ruby的神奇

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:48 26 4
gpt4 key购买 nike

在railscasts项目中你可以看到这段代码:

before(:each) do
login_as Factory(:user, :admin => true)
end

函数对应的定义是:

Factory.define :user do |f|
f.sequence(:github_username) { |n| "foo#{n}" }
end

我不明白 admin 参数是如何传递给函数的,而函数中没有关于 admin 参数的字样。谢谢

最佳答案

Factory.define 不是一个函数定义,它是一个方法,它接受一个符号或字符串(在本例中是用户)和一个定义你正在制作的工厂的 block 。 Factory(:user, :admin => true) 创建一个具有 admin 属性的 User 对象。它不是调用第二个片段中的代码,而是调用 Factory() 来初始化一个工厂,并选择一个(在本例中是第二个片段中定义的那个)。然后它也将散列形式的选项传递给工厂。

Factory 选择非常通用的 :user 工厂。选项 :admin=>true 只是告诉 Factory 将 User 上的 admin 实例变量设置为 true。

This is actually what it is calling in factory.rb in factory girl

def initialize(name, options = {}) #:nodoc:
assert_valid_options(options)
@name = factory_name_for(name)
@options = options
@attributes = []
end

因此 Factory(name,options) 在这段代码中等同于 Factory.new(name,options)。

http://www.ruby-doc.org/core/classes/Kernel.html注意 Array 和 String 等具有相似的结构。我现在想弄清楚他们是怎么做到的。

即使对于体面的 Ruby 程序员来说,这也令人困惑。我强烈推荐《Metaprogramming Ruby》这本书,它可能是我读过的关于 ruby​​ 的最好的书,它告诉你很多关于这个神奇的东西。

关于ruby-on-rails - 看不懂Ruby的神奇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com