问题标签 [psych]

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 投票
2 回答
970 浏览

ruby - 如何反序列化 Psych 中的类?

如何在 Psych 中反序列化以返回现有对象,例如类对象?

做一个类的序列化,我可以做

但是如果我尝试这样做Psych.load,我会得到一个匿名类,而不是 String 类。

正常的反序列化方法是Object#init_with(coder),但这只会改变现有匿名类的状态,而我想要 String 类。

Psych::Visitors::ToRuby#visit_Psych_Nodes_Scalar(o)在某些情况下,他们不是用 修改现有对象,而是init_with确保首先创建正确的对象(例如,调用Complex(o.value)以反序列化复数),但我认为我不应该对该方法进行修补。

我注定要使用低级或中级发射,还是我错过了什么?

背景

我将描述这个项目,为什么它需要类,以及为什么它需要(反)序列化。

项目

Small Eigen Collider 旨在为 Ruby 创建随机任务以运行。最初的目的是查看 Ruby 的不同实现(例如,Rubinius 和 JRuby)在给定相同的随机任务时是否返回相同的结果,但我发现它对于检测 Rubinius 和 YARV 的段错误也很有用。

每个任务由以下内容组成:

其中receiver是随机选择的对象,method_name是随机选择的方法的名称,*parameters是随机选择的对象的数组。&block不是很随机 - 它基本上相当于{|o| o.inspect}.

例如,如果接收者是“a”,method_name 是 :casecmp,参数是 [“b”],那么您将调用

这相当于(因为该块是不相关的)

Small Eigen Collider 运行此代码,并记录这些输入以及返回值。在此示例中,Ruby 的大多数实现返回 -1,但在某个阶段,Rubinius 返回 +1。(我将此作为错误提交https://github.com/evanphx/rubinius/issues/518并且 Rubinius 维护人员修复了该错误)

为什么需要课程

我希望能够在我的 Small Eigen Collider 中使用类对象。通常,它们将是接收器,但它们也可以是参数之一。

例如,我发现 YARV 段错误的一种方法是

在这种情况下,receiver 是类对象 Thread,parameters 是 [nil]。(错误报告:http ://redmine.ruby-lang.org/issues/show/4367 )

为什么需要(反)序列化

Small Eigen Collider 需要序列化有几个原因。

一是每次使用随机数生成器生成一系列随机任务是不切实际的。JRuby 有一个不同的内置随机数生成器,所以即使给定相同的 PRNG 种子,它也会给 YARV 提供不同的任务。相反,我所做的是我创建一个随机任务列表一次(第一次运行 ruby​​ bin/small_eigen_collider),让初始运行将任务列表序列化为 tasks.yml,然后运行程序的后续运行(使用不同的Ruby 实现)读取该 tasks.yml 文件以获取任务列表。

我需要序列化的另一个原因是我希望能够编辑任务列表。如果我有一长串导致分段错误的任务,我想将列表减少到导致分段错误所需​​的最小值。例如,使用以下错误 https://github.com/evanphx/rubinius/issues/643

本身不会导致分段错误,也不会

但如果你把两者放在一起,它确实如此。但我一开始有数千个任务,需要将其缩减为仅这两个任务。

在这种情况下,返回现有类对象的反序列化是否有意义,或者您认为有更好的方法吗?

0 投票
5 回答
7044 浏览

ruby-on-rails - Rails 3 - '无法解析 Yaml'

我不知道我做错了什么。我尝试运行“rails c”,但它只是给了我一个错误。它在 10 分钟前工作。:\

0 投票
2 回答
573 浏览

ruby - 通过 rbenv 的 Ruby 1.9.2-p290 产生来自 psych-1.2.1 的警告:VERSION 和 LIBYAML_VERSION

当我运行 ruby​​ 时,我收到以下警告:

我试过用谷歌搜索,但似乎找到了一个解决方案,让我认为它特定于我的系统。有没有办法解决这个问题?

0 投票
2 回答
2914 浏览

ruby - 为什么 YAML 解析器(syck 和 psych)的行为不同?

看这个案例:

ruby 1.9.2p0(2010-08-18 修订版 29036)[i686-linux]

当我使用 psych 解析器并且我需要格式化一个模糊地类似于日期的字符串时,它会引发异常,因为他认为这是一个日期字符串。使用 syck 不会出现此问题。

有人知道吗?

0 投票
1 回答
298 浏览

ruby-on-rails - Psych 无法解析简单的键:值对、Ruby、Yaml

ruby 1.9.2-p290 和 rails 3.1.3 遇到一些解析问题。

我的 YAML 文件如下所示:

其他 YAML 文件解析良好,如 database.yml 和语言环境文件。就这一个。关于为什么的任何想法?

0 投票
2 回答
1860 浏览

ruby-on-rails-3 - YAML.load 在 Rails 初始化程序中永远不会返回

我试图在我的 Rails 3.1 应用程序初始化期间加载一个 yaml 配置文件,并且对 YAML.load 的调用永远不会返回。这是我的初始化文件:

这是我的 stripe.yml 文件:

无论出于何种原因,YAML.load调用永远不会返回。如果我执行堆栈跟踪,它似乎卡在 syck.rb 第 135 行。有趣的是,我让我的应用程序在中断前停留的时间越长,对第 135 行的调用就越多。

我也尝试过明确地使用 Psych 而不是使用 Syck,但没有运气。(它最终也挂了。)

0 投票
1 回答
855 浏览

serialization - 序列化和反序列化

我有一个带有嵌入样本的活动记录类:

我想在数据库中序列化和存储样本,但是 GSL::Vector(来自 gsl gem)没有 to_yaml 方法。在使用 Rails 3.2 的默认 YAML 引擎 Psych 时,显然不推荐为 Sample 定义 to_yaml 和 YAML.quick_emit。

任何想法如何序列化和反序列化这个对象?

0 投票
2 回答
1370 浏览

ruby - 有没有办法告诉 ruby​​ 中的 Psych 使用内联模式?

环境:ruby1.9.3,心理(任何版本)例如:

实际结果:

期望输出:

0 投票
1 回答
3039 浏览

ruby - 如何使用文字标量样式在 YAML 中转储字符串?

我有一大串格式化数据(例如 JSON),我想在 ruby​​ 中使用 Psych 转储到 YAML,同时保留格式

基本上,我希望 JSON 使用文字样式出现在 YAML 中:

但是,当我使用YAML.dump它时,它不使用文字样式。我得到这样的东西:

我怎样才能告诉 Psych 以想要的方式转储标量?


解决方案:

非常感谢 Aaron Patterson 的解决方案,我在这里扩展:https ://gist.github.com/2023978

虽然有点冗长,但该要点是一种在 ruby​​ 中标记某些字符串以使用 YAML 中的文字样式输出的工作方式。

0 投票
1 回答
515 浏览

ruby-on-rails-3 - 无法使用 Ruby 1.9.2 将 yamler 设置为 Psych on Rails 3.2

我在 Rails 3 中使用 Ruby 1.9.2 阅读 Psych 是默认的 yaml 解析器。不适合我。还是很恶心。正在做

如各个地方所述不起作用。yamler 仍然很恶心。所以它似乎在某个地方被重置。

如何将 yamler 设置为 Psych?