【问题标题】:how to use a var outside that a method in ruby?如何在ruby中的方法之外使用var?
【发布时间】:2021-01-19 03:01:03
【问题描述】:

我对 ruby​​ 很陌生,但我遇到了问题。

有时我有一个必须采用 var 的方法,但该 var 不在定义范围内..示例:

x = 1
def suma()
 x+1
end

(我知道这个例子很傻,但正是我需要的。)

需要明确的是,我正在制作一个 html 对话框,但在使用 Vue +js 发送数据之前,我需要等待获得 rdy 才能使用它。 我做了一个 var chk_rdy 来检查它,但我可以触摸它..

里面我有一个回调

dialog.add_action_callback('rdyimport') {|action_context, val|

}

但不知道该放什么来改变我的变量。

【问题讨论】:

标签: ruby variables methods scope


【解决方案1】:

解决了!

只是在 var 之前加上 @@ 使其成为一个类 var...这样你就可以从类中的任何地方访问它,包括方法。

这是一个解释..https://blog.appsignal.com/2018/10/02/ruby-magic-class-level-instance-variables.html

谢谢!

【讨论】:

  • 为什么在这个用例中需要类变量而不是实例变量?始终尽可能缩小范围。
  • 那是因为我需要检查页面中的对象是否准备好(我很新),但是从 htmldialog(sketchup UI)和sketchup 发送 var 的唯一方法是使用回调,然后我需要对所有程序说我的对话框已准备好。回调在方法 show_dialog 内。
【解决方案2】:

在使用 Vue +js 发送数据之前,我需要等待 get rdy 使用它。我做了一个 var chk_rdy 来检查它,但我可以触摸它..

获取实例或类变量会暴露对象的实现细节,这将使代码维护变得混乱。

在面向对象的编程中,调用者并不确定对象是否准备好。调用者询问对象是否准备好。

class Foo
  # foo? is the Ruby convention for methods which return true/false
  # there's nothing special about the ? it is part of the method name.
  def ready?
    # whatever code determines the object is ready
  end
end

obj = Foo.new

if obj.ready?
  ...its ready...
else
  ...it isn't...
end

这隐藏了对象内部准备就绪的实现细节。它确保所有准备就绪检查都以相同的方式进行。这意味着如果准备检查的工作方式发生变化,它只需要在一个地方发生变化。

【讨论】:

  • 哦!太棒了……这真是个好主意!谢谢
【解决方案3】:

您也可以随时将变量传递给您的方法。

x = 4

def test(x)
  x + 1
end

test(x) => 5

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 2016-08-17
    • 2019-09-23
    • 2018-08-27
    • 1970-01-01
    • 2021-06-02
    • 2021-12-13
    • 2014-03-05
    相关资源
    最近更新 更多