Rails参数binding概念讲解
创始人
2024-06-16 10:00:13
0

在Ruby on Rails开发框架被我们用来实现简单的代码编写。在Ruby中,有许多参数值得我们去深入探讨。比如本文介绍Rails参数binding的相关内容。#t#

eval方法有一个可选的参数--binding,如果为指定的话,那么表达式的值就会是一个具体的范围或上下文环境绑定。不过不必为这个有所意外,Rails参数binding会返回一个Binding对象的实例,可以使用binding方法返回绑定的值。下是是ruby文档中提供的一个示例:

  1. def getBinding(str)   
  2. return binding()   
  3. end   
  4. str = "hello"   
  5. puts( eval( "str + ' Fred'" ) ) 
    #=> "hello Fred"   
  6. puts( eval( "str + ' Fred'", 
    getBinding("bye") ) ) #=> "bye Fred"   
  7. def getBinding(str) return binding() 
    end str = "hello" puts( eval( "str + ' 
    Fred'" ) ) #=> "hello Fred" puts
    ( eval( "str + ' Fred'", getBinding
    ("bye") ) ) #=> "bye Fred"  

 

Rails参数binding是内核的一个私有方法。getBinding方法通过调用binding方法返回当前上下文环境中str的值。在***次调用 eval方 法的时候,当前上下文环境是main对象,并且str的值就是定义的局部变量str的值。

在第二次调用eval方法是,当前的上下文环境则是 getBinding方法内部,局部变量str的值现在则为getBinding方法中参数str的值。Binding方法经常作为eval的第二个参 数,这样eval就不会因为找不到变量而出错了。

上下文环境也可以在类中定义。在下面的例子中,可以看到,实例变量@mystr和类变量@@x根据类而不同:

  1. class MyClass   
  2. @@x = " x"   
  3. def initialize(s)   
  4. @mystr = s   
  5. end   
  6. def getBinding   
  7. return binding()   
  8. end   
  9. end   
  10. class MyOtherClass   
  11. @@x = " y"   
  12. def initialize(s)   
  13. @mystr = s   
  14. end   
  15. def getBinding   
  16. return binding()   
  17. end   
  18. end   
  19. @mystr = self.inspect   
  20. @@x = " some other value"   
  21. ob1 = MyClass.new("ob1 string")   
  22. ob2 = MyClass.new("ob2 string")   
  23. ob3 = MyOtherClass.new("ob3 string")   
  24. puts(eval("@mystr << @@x", 
    ob1.getBinding)) #=> ob1 string x   
  25. puts(eval("@mystr << @@x", 
    ob2.getBinding)) #=> ob2 string x   
  26. puts(eval("@mystr << @@x", 
    ob3.getBinding)) #=> ob3 string y   
  27. puts(eval("@mystr << @@x", 
    binding)) #=> main some other value  

Rails参数binding的概念就为大家介绍到这里了。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...