- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个简单的类,它在初始化时接受一到八个参数。它将访问器设置为这些访问器以供以后使用。 Rubocop 正试图以 ABC 太高为由逮捕我,但我不确定我所做的是否真的有任何问题。在这种情况下,我只是在初始化时禁用检查吗?
class Foo
attr_accessor :one, :two, :three, :four
attr_accessor :five, :six, :seven, :eight
def initialize(p={})
@one = p[:one] if p[:one].present?
# ...
@eight = p[:eight] if p[:eight].present?
end
end
关于减小大小,我唯一的想法是做一些事情,比如在初始化时遍历我所有的 attr_accessors,看看 has 中是否有相应的符号通过,如果是,则分配它。
class Foo
attr_accessor :one, :two, :three, :four
attr_accessor :five, :six, :seven, :eight
def initialize(p={})
instance_variables.each do |variable|
send("@#{variable}") = p["#{send(variable)}".to_sym] if p["#{send(variable)}".to_sym].present?
end
end
end
但这似乎有点弱。
最佳答案
这是实现您想要做的事情的方法之一:
class Foo
attr_accessor(*%i[one two three four five six seven eight])
def initialize(p = {})
p.keys.each { |k| instance_variable_set("@#{k}", p.fetch(k, nil)) }
end
end
查看 Hash#fetch
方法。
您也可以使用它来访问 p
变量的键值对,如果您决定使用一个而不是 8 个变量 (@p
)
只是出于好奇写了这个版本(使用了一些元编程)——它会为添加的实例变量动态添加 attr_accessor
:
class Foo
def initialize(p = {})
p.keys.each do |k|
instance_variable_set("@#{k}", p.fetch(k, nil))
self.class.__send__(:attr_accessor, k)
end
end
end
发生了什么,我们获取提供给 initialize
方法的参数(散列 p
),获取它的键并从中创建实例变量,为每个变量分配相应的值到关键。然后我们为每个键定义 attr_accessor
。
a = Foo.new(a: 2, b: 3)
#=> #<Foo:0x00000002d63ad8 @a=2, @b=3>
关于ruby - 分配分支条件太高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791575/
我的 CSS: body { margin: 0; height: 100%; } canvas { background-color: black; height:
(我已经在堆栈上查看了其他一些类似的问题,特别是 Extra space at the bottom of CSS columns ,但我看不到提问者在他提出的 fiddle 中遇到的问题,并且尝试该
我得到了这样的声明: SELECT COUNT( epoa.eclass ) AS counts, epoa.eclass, map.eclass_description FROM `db2`.`ar
我正在创建一个自定义的 UIBarButtonItem,如下所示: UIImage *originalImage = [UIImage imageNamed:@"button"]; U
我确信这对我来说是一个完全愚蠢的举动,但无法弄清楚这里发生了什么。 我试图选择一个包含特定单词的 div,但 Jquery 似乎选择了错误级别的 div。如果你运行这个,你就会明白我的意思:
在Ubuntu 16.04 LTS中,pyteserract脚本吃得太高,导致系统间歇性重启。 top命令输出为 top - 21:23:31 up 27 min, 4 users, lo
我有一个 Redis 实例,其最大内存设置为 45GB,已用内存约为 40GB,峰值内存使用量为 42GB,但 RSS 太高了 80GB。有什么办法可以释放这段内存。 PID USER PR NI V
我刚刚浪费了一天的时间试图自己找到答案。 我应该有 this (works on FF) ,但是对于 IE7/8(我必须兼容 IE7/8),我有 this . 代码如下:
当我从 avi 文件解码帧,然后在 x264 中解码它们并保存到 mp4 文件时,输出文件的 fps 始终是 12,800。因此文件播放速度非常快。但是,当我将编码的 h264 帧保存为 avi 格式
我可以请教您关于内存问题的想法吗? 我的 java 应用程序并不大(如 14000 LOC),但使用了大约 300MB 的内存。它运行在带有 MySQL 数据库的 Tomcat 上。我正在使用 Hib
我正在尝试使用 libavformat 录制 RTP 流,但是录制视频的 FPS 高得离谱,我得到了数千 FPS,如果不是一万的话。我尝试将 FPS 设置为 30,并进行以下修改: AVFormatC
我的应用设置在 Root View Controller 使用 UIViewController containment 的位置呈现应用程序的主要内容(如果您有 side menu in your a
当我有一个带有 v-app-bar 的空应用时在v-app里面容器,应用栏占据了页面的一半。 Page title Hello Vue Demo in Co
在我的应用程序中,我播放音频直播,延迟非常重要。我正在使用 AVPlayer,但启动需要 5-6 秒,并且我需要最多 3 秒的延迟。我怎样才能更快地开始播放并减少延迟?设置一个小缓冲区就可以了?如何使
我正在使用 Unity3d 5.6.0f3 开发 Android 游戏。我的 Galaxy S6 Edge (Android 7.0) 上的 Google Play 服务运行良好。我使用 CloudO
我是一名优秀的程序员,十分优秀!