ruby – 从块设置实例变量
发布时间:2020-12-17 03:44:06 所属栏目:百科 来源:网络整理
导读:我如何实现类似下面的内容,以便当我在块中设置s变量时,它还在我的Topic类中设置@subject实例变量? class Topic def subject(blk) blk.call(@subject) if block_given? @subject unless block_given? endendmy_topic = Topic.newp my_topic.subject #= nilmy
我如何实现类似下面的内容,以便当我在块中设置s变量时,它还在我的Topic类中设置@subject实例变量?
class Topic def subject(&blk) blk.call(@subject) if block_given? @subject unless block_given? end end my_topic = Topic.new p my_topic.subject #=> nil my_topic.subject do |s| s = ['one','two','three'] s.pop p s #=> ['one','two'] end p my_topic.subject #=> nil... want it to be ['one,'two'] 解决方法
你不能按照你想要的方式去做. block参数引用与实例变量相同的对象,但它们是完全不同的变量,设置一个永远不会设置另一个.有两种选择:
>将变量设置为块的结果,因此它将如下所示: class Topic def subject @subject = yield if block_given? @subject unless block_given? end end 在块内: my_topic.subject do s = ['one','two'] s end >使主题方法instance_eval成为块,以便块可以显式设置实例变量 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |