“超级”的行为

时间:2015-10-16 07:35:04

标签: ruby

我有这段代码:

 <form  action="<?echo base_url();?>register/form_success" method="post" class="form-horizontal" id="career_submitform">
                            <div class="control-group">
                                <span class="caption-title">Please complete the registration form for getting the admission application number</span>

                            </div>
                            <input type="hidden" value="<? echo $applicant_id?>" name="applicant_id"> 
                            <input type="hidden" value="<? echo $grade_name?>" name="grade_name"> 
                            <input type="hidden" value="<? echo $grade_id?>" name="grade_id">
                            <div class="form-actions clearfix">
                                <div class="btncontinue-wrap">
                                    <input  type="button" onclick="myFunction()"  value="Continue" name="submit" class="btn-d btn-continue blue button-next" id="button_submit_style">
                                </div>
                            </div>
                        </form>

<script>
function myFunction() {
     $('#career_submitform').delay(4000).submit();
}
</script>

当我尝试使用它时,我收到此错误:

class B
  def self.definer(name, *args, &block)
    define_method(name) { self.instance_exec(*args, &block) }
  end
end

我理解B.definer(:tst) { super } # => :tst B.new.tst # => TypeError: self has wrong type to call super in this context: B (expected #<Class:#<Object:0x007fd3008123f8>>) 具有特殊含义,与调用方法没什么不同。有人可以解释为什么以及发生了什么?如果有人为此提出解决方案,也会很棒。

2 个答案:

答案 0 :(得分:0)

我没有收到与您相同的错误消息,但无论如何都会收到错误消息。必须在方法定义中使用super。但是你没有在方法定义中使用它。这引起了一个错误。

关于解决方案,我不能给你一个,因为你不清楚你想要做什么。

答案 1 :(得分:0)

你绝对不想要instance_exec。

如果你没有涉及* args,我说你只是想要这个:

def self.definer(name, &block)
  define_method(name, &block) 
end

但是,然后您的新definer方法会执行define_method首先执行的完全相同的操作,因此没有理由创建它,而不是仅仅使用{{ 1}}首先。

你到底想要做什么?解释你想做什么,也许有人可以帮助你。

但我认为您现有实施中的define_method并不是您想要的 - 它会在instance_exec调用时立即执行阻止,在调用definer时 - 我您是否希望在调用您定义的方法时执行该块?但我不确定,这取决于你想要做什么,这是不清楚的。 define_method superinstance_exec内没有任何意义 - 超级你觉得你用什么方法打电话?