问题标签 [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.
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,
本身不会导致分段错误,也不会
但如果你把两者放在一起,它确实如此。但我一开始有数千个任务,需要将其缩减为仅这两个任务。
在这种情况下,返回现有类对象的反序列化是否有意义,或者您认为有更好的方法吗?
ruby-on-rails - Rails 3 - '无法解析 Yaml'
我不知道我做错了什么。我尝试运行“rails c”,但它只是给了我一个错误。它在 10 分钟前工作。:\
ruby - 通过 rbenv 的 Ruby 1.9.2-p290 产生来自 psych-1.2.1 的警告:VERSION 和 LIBYAML_VERSION
当我运行 ruby 时,我收到以下警告:
我试过用谷歌搜索,但似乎找到了一个解决方案,让我认为它特定于我的系统。有没有办法解决这个问题?
ruby - 为什么 YAML 解析器(syck 和 psych)的行为不同?
看这个案例:
ruby 1.9.2p0(2010-08-18 修订版 29036)[i686-linux]
当我使用 psych 解析器并且我需要格式化一个模糊地类似于日期的字符串时,它会引发异常,因为他认为这是一个日期字符串。使用 syck 不会出现此问题。
有人知道吗?
ruby-on-rails - Psych 无法解析简单的键:值对、Ruby、Yaml
ruby 1.9.2-p290 和 rails 3.1.3 遇到一些解析问题。
我的 YAML 文件如下所示:
其他 YAML 文件解析良好,如 database.yml 和语言环境文件。就这一个。关于为什么的任何想法?
ruby-on-rails-3 - YAML.load 在 Rails 初始化程序中永远不会返回
我试图在我的 Rails 3.1 应用程序初始化期间加载一个 yaml 配置文件,并且对 YAML.load 的调用永远不会返回。这是我的初始化文件:
这是我的 stripe.yml 文件:
无论出于何种原因,YAML.load
调用永远不会返回。如果我执行堆栈跟踪,它似乎卡在 syck.rb 第 135 行。有趣的是,我让我的应用程序在中断前停留的时间越长,对第 135 行的调用就越多。
我也尝试过明确地使用 Psych 而不是使用 Syck,但没有运气。(它最终也挂了。)
serialization - 序列化和反序列化
我有一个带有嵌入样本的活动记录类:
我想在数据库中序列化和存储样本,但是 GSL::Vector(来自 gsl gem)没有 to_yaml 方法。在使用 Rails 3.2 的默认 YAML 引擎 Psych 时,显然不推荐为 Sample 定义 to_yaml 和 YAML.quick_emit。
任何想法如何序列化和反序列化这个对象?
ruby - 有没有办法告诉 ruby 中的 Psych 使用内联模式?
环境:ruby1.9.3,心理(任何版本)例如:
实际结果:
期望输出:
ruby - 如何使用文字标量样式在 YAML 中转储字符串?
我有一大串格式化数据(例如 JSON),我想在 ruby 中使用 Psych 转储到 YAML,同时保留格式。
基本上,我希望 JSON 使用文字样式出现在 YAML 中:
但是,当我使用YAML.dump
它时,它不使用文字样式。我得到这样的东西:
我怎样才能告诉 Psych 以想要的方式转储标量?
解决方案:
非常感谢 Aaron Patterson 的解决方案,我在这里扩展:https ://gist.github.com/2023978
虽然有点冗长,但该要点是一种在 ruby 中标记某些字符串以使用 YAML 中的文字样式输出的工作方式。
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?