- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
编辑:我稍微更改了规范,以更好地符合我的想象。
好吧,我真的不想伪造 C# 属性,我想将它们合而为一并支持 AOP。
给定程序:
class Object
def Object.profile
# magic code here
end
end
class Foo
# This is the fake attribute, it profiles a single method.
profile
def bar(b)
puts b
end
def barbar(b)
puts(b)
end
comment("this really should be fixed")
def snafu(b)
end
end
Foo.new.bar("test")
Foo.new.barbar("test")
puts Foo.get_comment(:snafu)
期望的输出:
Foo.bar was called with param: b = "test"testFoo.bar call finished, duration was 1mstestThis really should be fixed
有什么办法可以实现吗?
最佳答案
我有一些不同的方法:
class Object
def self.profile(method_name)
return_value = nil
time = Benchmark.measure do
return_value = yield
end
puts "#{method_name} finished in #{time.real}"
return_value
end
end
require "benchmark"
module Profiler
def method_added(name)
profile_method(name) if @method_profiled
super
end
def profile_method(method_name)
@method_profiled = nil
alias_method "unprofiled_#{method_name}", method_name
class_eval <<-ruby_eval
def #{method_name}(*args, &blk)
name = "\#{self.class}##{method_name}"
msg = "\#{name} was called with \#{args.inspect}"
msg << " and a block" if block_given?
puts msg
Object.profile(name) { unprofiled_#{method_name}(*args, &blk) }
end
ruby_eval
end
def profile
@method_profiled = true
end
end
module Comment
def method_added(name)
comment_method(name) if @method_commented
super
end
def comment_method(method_name)
comment = @method_commented
@method_commented = nil
alias_method "uncommented_#{method_name}", method_name
class_eval <<-ruby_eval
def #{method_name}(*args, &blk)
puts #{comment.inspect}
uncommented_#{method_name}(*args, &blk)
end
ruby_eval
end
def comment(text)
@method_commented = text
end
end
class Foo
extend Profiler
extend Comment
# This is the fake attribute, it profiles a single method.
profile
def bar(b)
puts b
end
def barbar(b)
puts(b)
end
comment("this really should be fixed")
def snafu(b)
end
end
关于这个解决方案的几点:
method_added
)而无需别名。class_eval
而不是 define_method
来定义新方法,以便能够支持采用 block 的方法。这也需要使用 alias_method
。profile
或comment
时存储类实例变量,然后在添加方法时应用。与前面的解决方案一样,method_added
Hook 用于跟踪何时添加了新方法,但 Hook 不是每次都移除 Hook ,而是检查实例变量。实例变量在应用 AOP 后被删除,因此它只应用一次。如果多次使用相同的技术,它可以进一步抽象。关于ruby - 如何在 Ruby 中使用 "fake"C# 样式属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1085070/
我在尝试从单独的项目中引用 mscorlib fake DLL 时遇到问题,如下所述。 我有许多 VS12 解决方案,我正在使用 MS Fakes 为其编写单元测试。根据以下 URL 中的建议,我决定
我在使用 Microsoft fakes 的解决方案中有一个单元测试项目,当我构建它时出现以下错误。它提示无法加载的 DLL 在磁盘上。我已经打开了 Fusion 日志记录,这表明绑定(bind)成功
是否可以设置一个 Target,在 Build Target 完成后在远程创建并推送一个 git 标签? 感谢您的帮助。 最佳答案 我使用了以下似乎有效的方法 Target "TagBuild" (f
我已经使用 Django 大约 2 年了,有一个功能我一直害怕使用:伪造迁移 . 我几乎到处都看过,我能得到的最多信息来自 documentation它指出: --假 Tells Django to
我将在我的单元测试中使用 Microsoft.Fakes。我读了一个tutorial Microsoft.Fakes 在其中为接口(interface)创建了一个 stub (在解决方案中实现),但在
我使用 VS 2015 U1。 我使用带有奇怪版本控制的外部库 - 1.0.4056.40164 . 我为这个库添加了一个 .Fakes 文件。当构建 fakes 程序集时,我收到以下警告: C:\S
单元测试项目 Up.UnitTests 在构建期间失败,并出现此构建错误 错误 CS0430:未在/reference 选项中指定外部别名“snh”错误 CS0234:命名空间“snh”中不存在类型或
有没有一种简单的方法可以让我使用 FAKE 获取正在执行的 .fsx 文件的路径? Powershell 和 (psake) 的使用性质和 MSBUILD 提供了此功能,但作为 FAKE/F# 菜鸟,
因此,在我正在构建的光线追踪器中,我已经获得了适用于球体的折射以及焦散效果,但是玻璃球看起来并不是特别好。我相信折射数学是正确的,因为光线似乎在以您期望的方式反转时弯曲,但它看起来不像玻璃,它只是看起
在VS中,通常在Build(增量式)和Rebuild之间进行区分,后者将先进行清理,然后再执行与Build相同的操作。我可以使用FAKE提供类似的行为吗? 让我们假设以下目标: Target "Cle
作为解决方法,我需要更改某个 Java 程序的系统时钟,而不触及代码才能获取: calendar.getinstance().get(calendar.year) = 2013 是否可以仅通过启动配置
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
当类库引用 Visual Studio 2013 下针对 .Net 4.5 和 Silverlight 5 的 PCL(可移植类库)时,我无法为类库 (.NET 4.5) 生成 Microsoft F
我正在尝试使用 FAKE 来构建位于多个子目录中的 F# 文件。 filesInDirMatching来自 FAKE。 #r @"packages/FAKE/tools/FakeLib.dll" op
这与我提出的最后几个问题无关。 我需要从 IP 网络摄像头 (SNC-RZ25N) 获取视频到 Flash Media Server。我宁愿不必使用 Windows,但如果它使事情变得更容易,我会的。
在 FAKE你通常有一个像这样的构建脚本: // "foo.fsx" #r @"./packages/tools/FAKE/tools/FakeLib.dll" open Fake Target "F
Django迁移中的--fake-initial和--fake有什么区别?使用假迁移有什么危险?有人知道吗非常感谢大家。 我正在使用Django 1.10 最佳答案 好吧,文档对此很清楚 --fake
我正在为一个项目构建一个模板,它目前没有构建服务器端。我需要测试我的表单和验证,并想要“伪造”表单提交。 我正在尝试这个: $("#save").click(function(e) { e.pre
考虑以下因素: #r @"FakeLib.dll" open Fake open Fake.StringHelper open Fake.ProcessHelper Shell.Exec("mkdir
我是一名优秀的程序员,十分优秀!