问题标签 [class-eval]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
183 浏览

ruby-on-rails - 如何删除 Spree Social 插件中的 OAUTH_PROVIDERS

我一直在这里阅读 SpreeSocial 文档。我不知道如何通过配置删除提供者。我试图将最近的提供商从列表中删除,但这不起作用。

我设法让“使用 LinkedIn 登录”出现在视图中,但我想删除“使用 Google+ 登录”链接。

如果我想用 .class_eval 打开 SpreeSocial 中的类(我认为这可能有助于我编辑可用的提供程序),我应该将这些文件放在哪里以便它们自动加载,或者我需要在哪里配置它们?Spree/Rails 很新,所以对配置和初始化程序不太熟悉。谢谢您的帮助!

我希望能够在这里调用 SpreeSocial 模块上的 .class_eval

0 投票
2 回答
855 浏览

ruby - 是否可以在 `class_eval` 中定义类方法?

我知道可以使用class_eval. 是否可以在上下文中定义类方法class_eval

0 投票
0 回答
68 浏览

ruby - 在实例上调用方法的更好方法

我的问题有几个层次,所以请多多包涵?当您在该实例上调用方法时,我构建了一个模块,可将Workflow gem中的工作流添加到该实例。它必须能够以哈希或一些基本数据结构的形式接收描述,然后在运行时将其转换为将描述的工作流放到类中的东西。所以一切都必须在运行时发生。解释所有疯狂的要求是为了什么有点复杂,但我希望这仍然是一个好问题。无论如何,在这里,我能做的最好的就是简要介绍一下上下文:

  1. 构建一个类并包含我构建的这个模块。
  2. 创建您的类的实例。
  3. 调用inject_workflow(some_workflow_description)实例上的方法。这一切都必须是动态的。

对我来说棘手的部分是,当我使用public_send()or eval()or时exec(),我仍然需要发送一些嵌套的方法调用,而且它们似乎使用了 2 个不同的范围,即类和工作流(gem)。当有人使用 Workflow gem 时,他们会在自己的类中手写这些方法调用,以便正确地确定所有内容。gem 可以访问它创建方法的类。我尝试这样做的方式是,用户不会在类上手写方法,而是通过此处显示的方法将它们添加到类中。所以我无法使用块让它工作,因为我必须进行嵌套块调用,例如

我正在尝试做的一件事是多次调用Workflow#state()方法,同时嵌套时间。对我来说,问题似乎是当我嵌套这样的方法时我无法获得正确的范围。nWorkflow#event(with, custom_params) 0..n

它就像我想要的那样工作(我认为......)但我不太确定我是否达到了最佳实施。事实上,我想我可能会为我所做的事情得到一些强有力的评价。我尝试使用public_send()以及我能找到的所有其他东西来避免使用class_eval()无济于事。

每当我尝试使用其中一种“更好”的方法时,我都无法完全确定范围,有时,我完全调用了错误对象上的方法。所以我认为这是我需要帮助的地方,是吗?

这是一些尝试的目的,但这是更多的伪代码,因为我永远无法获得这个版本或任何类似的版本。

根据我的尝试,所有这些尝试都以相同的结果结束,这是我不需要的范围,因为我正在评估 Workflow gem 中的代码,而不是模块或用户类中的代码。

无论如何,这是我的实现。如果有人能指出我正确的方向,我将不胜感激!

我发誓,我在 300000 行文本下开始了这个问题。谢谢你挂在那里!如果您还没有睡着,这里还有更多文档。 我的宝石中的模块


0 投票
1 回答
231 浏览

ruby - 深入 Ruby class_eval 和 instance_eval

class_eval并且instance_eval在诸如定义方法之类的情况下是可以预测的。我也了解类的实例和类的单例(又名特征类)之间的区别。

我无法弄清楚以下唯一的事情:假设,出于某些战略目的,我们希望使现有类成为单例。

在这两种情况下都得到了

是的,我的意思正是这种方法。

此外,这两个变体给出了相同的结果,就像self在两种情况下都指向类对象

怎么来的?任何人都可以阐明这一点吗?

0 投票
1 回答
186 浏览

ruby - 如何在 Ruby 的 class_eval 语句中使用哈希

当我遇到一个令人沮丧的问题时,我正在做家庭作业。该作业是 Ruby 元编程中的一个练习,目标是定义一个“attr_accessor_with_history”,它与“attr_accessor”做所有相同的事情,但还提供一个属性曾经存在的所有值的历史记录。这是作业中提供的代码以及我为完成作业而添加的一些代码:

我想使用散列来存储不同属性的不同历史记录,但我无法在 setter 的 class_eval 语句中访问该散列。无论我如何尝试设置它,我似乎总是为 []= 方法获得 NoMethodError,因为“history_hash”以某种方式变成 NilClass 类型,或者发生 NameError,因为它将“history_hash”视为未定义的局部变量或方法。如何在 class_eval 语句中使用哈希?

0 投票
1 回答
678 浏览

ruby-on-rails - 在 Spree 中覆盖控制器 - 在自动加载常量时检测到循环依赖

我正在尝试像这样向 Spree Admin PromotionsController 添加操作

应用程序/控制器/spree/admin/promotions_controller.rb

但我收到了这个错误:

自动加载常量 Spree::Admin::PromotionsController 时检测到循环依赖

我也试图完全覆盖控制器:

效果很好,但它看起来像拐杖

任何帮助将不胜感激,谢谢

路线:

0 投票
1 回答
411 浏览

ruby-on-rails - Ruby:如何在模块加载到其父类中之前急切加载类内容

我有几个有常数的类SCHEMA

它们是 STI 方案中基类的子类

然后我有一个模块,它需要为从包含该模块的类继承的所有类动态访问该常量

但是在执行时以及在如何调用它的上下文中,它找不到模块并返回NameError: uninitialized constant #<Class:0x0000560848920be8>::SCHEMA

请注意,subclass.const_get("SCHEMA")也失败了

编辑:这是一个加载顺序问题。在类上运行之后,该常量可用,因为随后加载了该类。但是通过尝试预先加载这个类,模块会在预先加载时从父类继承,并且模块代码仍然在设置常量之前运行。

是否有某种类似于继承的钩子,但它允许所有内容都预加载?

0 投票
1 回答
43 浏览

flutter - 如何在变量中使用类?

我想将获取的数据转换如下,但出现错误并关闭模拟器!我能做些什么?

这是类 ResponseCompany.dart

这是 ResponseCompany.g.dart

0 投票
1 回答
62 浏览

ruby-on-rails - 为什么这个继承自 ActiveRecord::Base 的类不能具有 class_eval 作用域

注意:我知道我在这里所做的可能很愚蠢,但我什至不一定会使用这段代码,我现在只是好奇。

如果类中缺少特定方法,我正在尝试向类动态添加一个空的 Rails 范围

该文档特别似乎表明这应该是可能的:https ://api.rubyonrails.org/classes/ActiveSupport/Concern.html

klass 已正确设置为此处的类,但是尝试评估作用域的创建失败,undefined method 'scope' for #<Class:0x0000560e35d2eb48>但是当我调用时,klass.ancestors我可以确认 klass 是继承自ActiveRecord::Base并且应该具有作用域。

任何想法为什么我不能class_eval scope在这里

0 投票
2 回答
101 浏览

ruby - 如何在 Ruby 中临时重新定义方法?

说,我有:

如何临时为return#test的所有实例(现有实例和新实例)创建方法,然后稍后恢复原始方法?Test113

这听起来很简单,但我找不到实现它的好方法。可能是因为我对Ruby的了解不多。

到目前为止我发现的是:

哪个可以完成这项工作,但据我所知,如果存在的话,它也会重新定义现有的#old_test?..感觉就像是一种黑客行为,而不是正确使用元编程?..

  1. 是否可以在不使用别名的情况下做这样的事情(但也可以不修改源代码Test)?
  2. 如果没有(或者如果有更简单/更好的方法),如果您可以修改源代码,您将如何做到这一点Test

如果您能描述实现同一目标的多种方法,即使是那些困难或不切实际的方法,我将不胜感激。只是想了解一下 Ruby 中元编程的灵活性和局限性:)

非常感谢

PS 我开始这一切的原因:我使用 gemrack-throttle来限制以 开头的请求/api,但其他 url 不应该受到影响。我想测试所有这些以确保它有效。为了测试节流,我也必须将中间件添加到测试环境中。ApiController我已经成功地对其进行了测试(使用 minitest),但是不应限制所有其他测试测试,因为如果我们需要在每个请求后等待 1 秒,它会使测试花费更长的时间。

我决定在 minitest 的sRequestSpecificIntervalThrottle#allowed?中用猴子补丁来暂时禁用所有这些测试的节流,然后在s 中再次重新启用它(否则测试节流本身的测试将失败)。如果您告诉我您将如何处理此问题,我将不胜感激。{ true }#setup#teardown

然而,既然我已经开始深入研究元编程,我也只是好奇如何实现这一点(暂时重新定义一个方法),即使我实际上并不打算使用它。