1

我开始使用 Treetop(尽管我不认为这是一个树顶错误),并且我正在尝试解析一个简单的日期字段。

我试图弄清楚日期是否包括一个月,如果是,则返回。所以我将我解析的树传递给我的视图并说

< % if !@input_date.month.nil? % >

      < %= @input_date.month.text_value % >

<% 结束 %>

在我的@input_date 中,月份不存在,所以我期待没有输出,但我得到了一个错误

#<Treetop::SyntaxNode:0x41a0240> 的未定义方法“月”

我也尝试过使用 .exists,但我得到了相同的结果。

为什么是这样??还有其他方法可以检查月份的存在吗?

4

2 回答 2

1

如果要检查方法是否存在,可以使用 object.respond_to?(:method_name)。看起来您的示例中不存在“月”方法。

如果您想要测试对象是否为 nil,也可以使用“try”方法,然后调用方法。

<%= object.try(:method, :param) %> 而不是 <% if !object.nil? %>.....

我从这里得到的

于 2011-08-01T19:09:35.860 回答
0

不要在解析器上下文之外传递解析结果。SyntaxNode 仅用于解析器内部。当您成功解析时,调用您在树上定义的函数以返回域对象 - 不要只使用解析树,这不是它的用途。

于 2015-05-06T02:22:10.490 回答