“公共/受保护/私有”如何?方法已实现,我该如何模拟它?
在 ruby 中,您可以这样做:
class Thing
public
def f1
puts "f1"
end
private
def f2
puts "f2"
end
public
def f3
puts "f3"
end
private
def f4
puts "f4"
end
end
现在 f1 和 f3 是公共的,f2 和 f4 是私有的。内部发生了什么,允许您调用一个类方法,然后更改方法定义? 我如何实现相同的功能(表面上是创建我自己的 java 类注释)
例如,
class Thing
fun
def f1
puts "hey"
end
notfun
def f2
puts "hey"
end
end
...而 fun 和 notfun 会更改以下函数定义。
谢谢
In ruby, you can do this:
class Thing
public
def f1
puts "f1"
end
private
def f2
puts "f2"
end
public
def f3
puts "f3"
end
private
def f4
puts "f4"
end
end
where now f1 and f3 and public, f2 and f4 is private. What is going on internally that allows you to invoke a class method that then changes the method definition? How can I implement the same functionality (ostensibly to create my own java like annotations)
for example...
class Thing
fun
def f1
puts "hey"
end
notfun
def f2
puts "hey"
end
end
and fun and notfun would change the following function definitions.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有时您可以将 Ruby 放入浓缩咖啡杯中。让我们看看如何。
这是一个模块 FunNotFun...
...您可以使用它来扩展一个类...
...结果如下:
但请参阅下面的行以获得更好的方法。
注释(参见 Normalocity 的答案)麻烦更少,并且作为一种常见的 Ruby 习惯用法,可以更轻松地传达代码的意图。以下是使用注释的方法:
在使用中,注释出现在方法定义之后,而不是之前:
结果是相同的:
You can sometimes shove Ruby into an espressso cup. Let's see how.
Here's a module FunNotFun...
... that you can use to extend a class ...
... with this result:
But see below the line for a better way.
Annotations (see normalocity's answer) are less trouble and, being a common Ruby idiom, will more easily communicate your code's intent. Here's how to do it with annotations:
In use, the annotation comes after the method is defined, rather than before:
The result is the same:
听起来您想为 Ruby 语言本身编写扩展,这是可能的。这不是可以简单解释的内容,但此链接应该可以帮助您入门:
http: //ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
这个参考资料与 Ruby 中的注释有关,也可能有帮助/相关:
http://martinfowler.com/bliki/RubyAnnotations.html
Sounds like you want to write extensions to the Ruby language itself, which is possible. It's not something that can be explained briefly, but this link should get you started:
http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
This reference, having to do with annotations in Ruby, might also be helpful/relevant:
http://martinfowler.com/bliki/RubyAnnotations.html
这是一个纯红宝石解决方案,可以帮助您找到正确的方向。它取决于
method_added
。请小心使用保护子句以避免递归。Here's a pure-ruby solution to get you in the right direction. It hinges on
method_added
. Be careful to avoid recursion by using a guard clause.