【问题标题】:Calling function by value of variable [closed]通过变量的值调用函数[关闭]
【发布时间】:2016-10-18 14:14:00
【问题描述】:

一切都在标题中。 我在 php 中想要的示例:

function x($name){
 echo 'hello'.$name;
}

$var = "x";

$$var('Joe');

返回“乔”

我认为这个问题已经有很多答案了,但我找不到合适的词来拼写它,所以我的搜索查询毫无意义......

谢谢

编辑:我正在使用带有播放框架的 scala,我想根据用户代理调用不同的模板。 在玩我调用模板使用:

Ok(views.html.templateFileName(many args))

我正在寻找一种方法:

Ok(views.html.<Template name based on user agent>(many args))

【问题讨论】:

  • 那么,这是一个 php、java 还是 scala 的问题?另外,你的问题是什么?
  • 这在 Java 中是不可能的。您要解决的业务需求是什么?
  • 这在 Java 或 Scala 中使用反射是可能的,但很可能有更好的方法来完成您实际想要做的事情。正如蒂莫西所说,你认为你需要这个的原因是什么?
  • 感谢您的关注,我刚刚更新了我的帖子
  • 您应该能够从请求中获取用户代理标头。请添加更多与 Play 相关的代码。

标签: java scala playframework


【解决方案1】:

使用反射可以做到这一点,但语法非常冗长。

让我们声明一个名为 Foo 的类,并在内部声明一个名为 bar 的方法,该方法接受一个整数参数并返回整数

通常我们调用foo.bar(1)这样的方法,其中foo是Foo类的对象引用。

现在让我们使用方法名称bar 来调用该方法。

class Foo {
  def bar(x: Integer): Int = x * x
}

val result = classOf[Foo].getDeclaredMethod("bar", classOf[Integer]).invoke(new Foo, new Integer(1))

REPL 输出

@ class Foo {
    def bar(x: Integer): Int = x * x
  }
defined class Foo
@
@ val result = classOf[Foo].getDeclaredMethod("bar", classOf[Integer]).invoke(new Foo, new Integer(1))
result: Object = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多